2022-02-12 00:01:24 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
2022-02-12 00:01:32 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-02-12 00:04:11 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds) |
2022-02-12 00:07:05 +0100 | Guest|11 | (~Guest|11@96.63.212.186) (Quit: Connection closed) |
2022-02-12 00:07:23 +0100 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2022-02-12 00:08:31 +0100 | vysn | (~vysn@user/vysn) |
2022-02-12 00:09:19 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 00:13:03 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) |
2022-02-12 00:13:24 +0100 | <hololeap> | I'm still not great at reasoning about lazy/strict evaluation and how it influences space/time metrics |
2022-02-12 00:13:36 +0100 | <hololeap> | but it seems like comonads are especially difficult to reason about |
2022-02-12 00:14:39 +0100 | <hololeap> | if you set up a cellular automata simulation that's modeled with the store comonad, the naive implementation seems to have something like O(2^n) time for each step of the simulation |
2022-02-12 00:15:33 +0100 | <hololeap> | but if you set it up with a Representable array backend you don't have this problem. I'm still confused as to why |
2022-02-12 00:17:41 +0100 | <hololeap> | [1] https://hackage.haskell.org/package/adjunctions-4.4/docs/Control-Comonad-Representable-Store.html |
2022-02-12 00:17:46 +0100 | <hololeap> | [2] https://hackage.haskell.org/package/vector-sized-1.5.0/docs/Data-Vector-Generic-Sized.html#t:Repre… |
2022-02-12 00:20:16 +0100 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) |
2022-02-12 00:21:35 +0100 | azimut_ | (~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection) |
2022-02-12 00:21:50 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2022-02-12 00:22:08 +0100 | <monochrom> | If it's as bad as 2^n time, it may be unrelated to laziness or eagerness. More like redundant recursion. |
2022-02-12 00:22:56 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 00:23:19 +0100 | <monochrom> | For example changing "f(n) = let y = f(n-1) in y+y" to "f(n) = f(n-1) + f(n-1)" is a simple way to turn n-time into 2^n-time. This holds for both lazy and eager evaluation. |
2022-02-12 00:24:02 +0100 | <Rembane> | Is Representable perhaps doing memoization for you? I'm just guessing here. |
2022-02-12 00:24:54 +0100 | <monochrom> | Yeah "array backend" begins to sound like automatic dynamic-programming-ization, but I haven't learned comonad or store. |
2022-02-12 00:25:42 +0100 | <monochrom> | But it corroborates with 2^n -> n like my example. |
2022-02-12 00:26:41 +0100 | <hololeap> | yeah it's storing each step to the vector with [1]. I think this does have something to do with strictness, though, since if it wasn't *actually* storing to the vector but just building up thunks saying to do so later, wouldn't I run into the same 2^n-time problem as before? |
2022-02-12 00:26:57 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 240 seconds) |
2022-02-12 00:27:03 +0100 | <dolio> | I don't think it has anything to do with strictness. |
2022-02-12 00:27:06 +0100 | <geekosaur> | not necessarily, it'd just do the O(n) late |
2022-02-12 00:27:12 +0100 | <dolio> | It has to do with functions being a bad implementation of arrays. |
2022-02-12 00:27:22 +0100 | <hololeap> | ok |
2022-02-12 00:27:35 +0100 | <hololeap> | so this is somewhat specific to the store comonad |
2022-02-12 00:27:54 +0100 | <hololeap> | since Store s a = (s -> a, s) |
2022-02-12 00:28:39 +0100 | <hololeap> | if it memoizes between each mutation you get the same semantics but much better time |
2022-02-12 00:28:50 +0100 | <dolio> | Yes, all the work done by the function is not shared across separate invocations of the function with the same input. |
2022-02-12 00:29:31 +0100 | <dolio> | And every time you split, you introduce a new dimension for work to avoid being shared. |
2022-02-12 00:30:11 +0100 | <hololeap> | oh... this sounds like it could be related to linear types |
2022-02-12 00:30:52 +0100 | <hololeap> | like you could have some automatic memoization thing using linear types... I'm also not very familiar with linear types :p |
2022-02-12 00:32:29 +0100 | slowtype- | (~slowtyper@46.12.42.68.dsl.dyn.forthnet.gr) (Ping timeout: 250 seconds) |
2022-02-12 00:32:33 +0100 | <hololeap> | I guess my other question is if you run `extend` on this Store implementation from adjunctions, would there be some intermediate moment where you would have effectively squared the memory requirements of your vector? |
2022-02-12 00:33:05 +0100 | <hololeap> | since it just uses the default definition of `extend f = fmap f . duplicate` |
2022-02-12 00:33:06 +0100 | slowtyper | (~slowtyper@user/slowtyper) |
2022-02-12 00:33:27 +0100 | <hololeap> | and duplicate on a 100x100 vector would be 10,000 100x100 vectors |
2022-02-12 00:33:35 +0100 | <hololeap> | unless laziness somehow saves the day here |
2022-02-12 00:34:29 +0100 | <hololeap> | I wouldn't even know how to investigate this if I wanted to |
2022-02-12 00:34:30 +0100 | <geekosaur> | or purity (shared?) |
2022-02-12 00:36:28 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 00:37:30 +0100 | <dolio> | It doesn't seem like the problem is strictness/laziness. It is thinking about references. |
2022-02-12 00:37:57 +0100 | <hololeap> | specifically because I'm talking about vector though... |
2022-02-12 00:38:25 +0100 | <hololeap> | right? |
2022-02-12 00:38:45 +0100 | <hololeap> | if it was a different Representable, it would have to do with strictness/laziness |
2022-02-12 00:39:02 +0100 | <hololeap> | *and then my brain melts* |
2022-02-12 00:39:33 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-02-12 00:40:40 +0100 | <monochrom> | The Vector you used is likely lazy in elements, only eager in spine. |
2022-02-12 00:40:45 +0100 | <dolio> | If I create an array of length N of arrays of length N of integers, and every element of the outer array is the same array, how much memory does it use? |
2022-02-12 00:40:57 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 00:41:06 +0100 | <hololeap> | I have no idea, dolio :) |
2022-02-12 00:41:06 +0100 | slowtype- | (~slowtyper@2a02:214c:8494:a100:8f:b3ce:d37b:a68d) |
2022-02-12 00:41:43 +0100 | <monochrom> | Furthermore, I bet per-element laziness is necessary for self-referencing dynamic programming to not become bottom. |
2022-02-12 00:41:57 +0100 | slowtyper | (~slowtyper@user/slowtyper) (Ping timeout: 240 seconds) |
2022-02-12 00:42:04 +0100 | <dminuoso> | What are revisions on hackage? Im dabbling around with a nix overrideCabal to swap out a package, but the builder keeps trying to fetch from URIs like http://hackage.haskell.org/package/config-value-0.8.2/revision/1.cabal |
2022-02-12 00:42:19 +0100 | <dminuoso> | Im trying to figure out what they are and why nix is doing this |
2022-02-12 00:42:37 +0100 | <hololeap> | dminuoso: they are what the sound like. revisions to a cabal file that don't warrant a version bump |
2022-02-12 00:43:01 +0100 | <monochrom> | Revisions are post-mortem changes to the *.cabal files so that you don't have to release a new version number just because you change "base < 5" to "base < 6". |
2022-02-12 00:43:37 +0100 | <monochrom> | Therefore, if possible, you should prefer the latest revision. |
2022-02-12 00:43:40 +0100 | <dminuoso> | Is there any example of a package that has revisions on hackage? |
2022-02-12 00:43:49 +0100 | <hololeap> | they also use dos line endings for some reason :D |
2022-02-12 00:43:57 +0100 | <sclv> | when cabal unpacks a package it overrides the cabal file with that of the latest revision |
2022-02-12 00:44:40 +0100 | <hololeap> | dminuoso: there are tons and tons |
2022-02-12 00:45:14 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 00:45:19 +0100 | <dminuoso> | Ahh I see. |
2022-02-12 00:45:21 +0100 | <dminuoso> | https://hackage.haskell.org/package/config-value-0.8.1 |
2022-02-12 00:45:38 +0100 | <dminuoso> | Using overrideCabal to just swap out the version is not enough, I gotta remove the revision information |
2022-02-12 00:45:54 +0100 | <dminuoso> | monochrom: thanks, that helped. :) |
2022-02-12 00:45:58 +0100 | <janus> | sclv: can i work on "Rewrite Browse and Search pages for Hackage, implement new ranking" ? |
2022-02-12 00:46:15 +0100 | <sclv> | janus: for gsoc, or just in general? either is welcome! |
2022-02-12 00:46:25 +0100 | <hololeap> | dminuoso: https://github.com/haskell-infra/hackage-trustees/blob/master/revisions-information.md |
2022-02-12 00:46:39 +0100 | jespada | (~jespada@87.74.36.188) (Quit: Textual IRC Client: www.textualapp.com) |
2022-02-12 00:46:42 +0100 | <hololeap> | here is an example: https://hackage.haskell.org/package/aeson-1.5.6.0/revisions/ |
2022-02-12 00:46:44 +0100 | <janus> | i don't need funding so i don't think it makes sense to apply for gsoc? i want to work on it this weekend and next week |
2022-02-12 00:46:57 +0100 | <janus> | and after that if i don't get done in time, of course |
2022-02-12 00:47:02 +0100 | <sclv> | janus: sounds great! |
2022-02-12 00:47:26 +0100 | <hololeap> | (thanks everyone for the discussion on comonads and strict/lazy. I've got some food for thought) |
2022-02-12 00:47:28 +0100 | <dminuoso> | hololeap: Cheers, thats some helpful insights |
2022-02-12 00:47:33 +0100 | <sclv> | if you want to chat about what the general design is let me know, but I think the tickets hopefully explain the issues well enough. |
2022-02-12 00:48:30 +0100 | <janus> | sclv: well i think the most important thing is to just get it loading quickly while retaining the features, that's what i was imagining |
2022-02-12 00:48:40 +0100 | <sclv> | Basically we just need to make displaying browse faster (by letting it start rendering the first page of the table before All Packages are loaded) and make it more useful by letting people add custom filters, both sticky and otherwise. Generally we probably should just use a more modern tabular data js widget, although ideally not one that relies on dragging in a whole mess of npm |
2022-02-12 00:49:05 +0100 | <sclv> | yeah, just fast loading on its own would be a huge win. |
2022-02-12 00:49:11 +0100 | <janus> | right, i was wondering about the frontend, would it make sense to rewrite it for that page, or is that not permitted? |
2022-02-12 00:49:22 +0100 | <janus> | i was working with PureScript for Exfreight and i liked that |
2022-02-12 00:49:24 +0100 | <sclv> | lots of people have told me they like browse but find its load times make it less useful. |
2022-02-12 00:49:35 +0100 | <sclv> | janus: what do you mean "rewrite it for that page"? |
2022-02-12 00:50:04 +0100 | <sclv> | we only use the tabular data widget in the browse/search interface. everything else is plain tables. i'd be happy to swap in anything that doesn't cause the build to become difficult and fragile. |
2022-02-12 00:50:06 +0100 | <janus> | for example, if it was a purescript frontend that implemented filtering dialogs, paging and such, that is a bit of logic |
2022-02-12 00:50:11 +0100 | asivitz | (uid178348@id-178348.tinside.irccloud.com) (Quit: Connection closed for inactivity) |
2022-02-12 00:50:44 +0100 | <sclv> | yeah, i mean i'd rather whatever it is be "a chunk of js code the page includes." dragging a pursecript dep into the hackage build chain seems painful. |
2022-02-12 00:51:25 +0100 | <janus> | ok, so preferrably just plain javascript, i understand |
2022-02-12 00:51:28 +0100 | <sclv> | if there's a not painful way to do it, i'm open, but i would hate to create a situation where people needed to do more than just "run cabal" to build the hackage server |
2022-02-12 00:51:43 +0100 | <sclv> | (and by people, i mean, primarily me. i'm people :-P) |
2022-02-12 00:52:03 +0100 | <janus> | right right, i understand completely |
2022-02-12 00:52:19 +0100 | <janus> | i think i'll start with the backend anyway |
2022-02-12 00:52:22 +0100 | <janus> | ok i'll dig in |
2022-02-12 00:52:31 +0100 | <sclv> | so yeah, just faster is a huge win. i think being able to filter out deprecated stuff would be nice, etc, but its somewhat lower priority. |
2022-02-12 00:52:48 +0100 | <sclv> | also as you dig in you'll probably get your own sense of what features you think would be easy and pleasant too |
2022-02-12 00:53:11 +0100 | <sclv> | (oh i'll also note that the browse/search page is the least mobile friendly of all our pages -- the rest all work pretty nicely) |
2022-02-12 00:53:40 +0100 | <janus> | right |
2022-02-12 00:53:42 +0100 | <sclv> | (but also, presenting large amounts of tabular data on a mobile screen has innate limitations) |
2022-02-12 00:53:54 +0100 | <hololeap> | dminuoso: I don't know if this will help you at all, but this is how I've been dealing with hackage packages with revisions using gentoo: https://github.com/hololeap/gentoo-haskell/blob/master/dev-lang/dhall/dhall-1.40.2.ebuild |
2022-02-12 00:55:09 +0100 | <hololeap> | the key things to take from that are that the .tar.gz from hackage and the .cabal revision need to be downloaded seperately, and I use dos2unix on the revised cabal file just to make patches more consistent |
2022-02-12 00:55:15 +0100 | _________ | (~nobody@user/noodly) (Ping timeout: 250 seconds) |
2022-02-12 00:55:41 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 00:56:19 +0100 | <hololeap> | (because sometimes I like to patch the revised .cabal file for various reasons) |
2022-02-12 00:56:28 +0100 | _________ | (~nobody@user/noodly) |
2022-02-12 00:57:11 +0100 | <dminuoso> | hololeap: Its all good. My problem was just that I was overriding an existing nix package whose original version had a revision. So I essentially took a knife and replaced the version, so the builder tried to fetch that same revision but on the new versino |
2022-02-12 00:57:25 +0100 | <dminuoso> | Which failed when trying to fetch that corresponding cabal file from hackage |
2022-02-12 00:57:49 +0100 | <dminuoso> | So I had to not only change the version to 0.8.2, but also reset the revision to null |
2022-02-12 00:58:11 +0100 | <hololeap> | why do they give the .cabal revisions DOS line endings? |
2022-02-12 00:58:49 +0100 | <geekosaur> | probably html line endings that don't get translated? |
2022-02-12 00:58:59 +0100 | <dminuoso> | Fun fact, "unix line endings" used to be CRLF as well. |
2022-02-12 00:59:24 +0100 | <janus> | the LF used to just roll the paper right? and then the CR would return the carraige |
2022-02-12 00:59:37 +0100 | <janus> | so back then, could you even use LFCR and it'd work? |
2022-02-12 00:59:43 +0100 | <geekosaur> | oh, even better. cr cr lf to give the ksr33 time to catch up |
2022-02-12 00:59:46 +0100 | <dminuoso> | janus: Yes. |
2022-02-12 00:59:57 +0100 | marquis_1ndras | (~marquis_a@124.170.163.166) (Ping timeout: 240 seconds) |
2022-02-12 01:00:03 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2022-02-12 01:00:07 +0100 | <dminuoso> | And you can observe the fact that this went into unix by looking at stty |
2022-02-12 01:00:08 +0100 | <geekosaur> | telnet kept doing that for years |
2022-02-12 01:00:11 +0100 | <sclv> | i don't recall that part of the codebase, but i suspect that its just an artifact of portability. i.e. CRLF might be a pita, but its pretty universally accepted. it could just be an accident, that works well enough nobody bothered to change it too. |
2022-02-12 01:00:20 +0100 | <dminuoso> | By default it expects crlf line endings to represent a newline |
2022-02-12 01:00:30 +0100 | <dminuoso> | You have to manually give it a flag to interpret LF as CRLF |
2022-02-12 01:00:33 +0100 | zeenk | (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!) |
2022-02-12 01:00:58 +0100 | marquis_andras | (~marquis_a@124.170.163.166) |
2022-02-12 01:01:10 +0100 | <dminuoso> | If you dont do that, you just get the line feed and you have stair cases |
2022-02-12 01:01:41 +0100 | <geekosaur> | aka the old "stty raw" problem |
2022-02-12 01:02:02 +0100 | <hololeap> | if the unrevised .cabal files in the tarballs were CRLF, it wouldn't be so annoying, but most people package them as "unix" line endings |
2022-02-12 01:02:03 +0100 | <dminuoso> | Even ASCII adopted to change the name of \n to newline, originally it was named line feed, because at that time quite a few systems adopted this new convention to interpret LF as both CRLF |
2022-02-12 01:02:08 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 01:02:34 +0100 | <hololeap> | so I'll get a "different line endings" error from patch after a revision bump |
2022-02-12 01:02:36 +0100 | <dminuoso> | (So this was done to reduce confusiun) |
2022-02-12 01:03:32 +0100 | <janus> | hololeap: this is why i asked about windows textareas. because revisions are made using a textarea |
2022-02-12 01:03:41 +0100 | jgeerds_ | (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 250 seconds) |
2022-02-12 01:03:58 +0100 | <sclv> | hololeap: are _all_ the endings in the revised cabal files crlf, or only some? |
2022-02-12 01:04:04 +0100 | <sclv> | and also all revised cabal files, or only some? |
2022-02-12 01:04:14 +0100 | <hololeap> | all of them |
2022-02-12 01:04:31 +0100 | <hololeap> | however, _most_ but not _all_ of the original cabal files are "unix" |
2022-02-12 01:05:04 +0100 | <hololeap> | I think that just reflects whatever system the maintainer packaged it on |
2022-02-12 01:05:27 +0100 | <hololeap> | and/or wrote it on |
2022-02-12 01:06:21 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 01:06:29 +0100 | <sclv> | If you look at the code, there's nothing that enforces CRLF. it just checks the revised file is an allowed revision (i.e. an allowed change of allowed fields) and then takes whatever it is given: https://github.com/haskell/hackage-server/blob/c40bc16ff221505c6a9cd1099460cf72af56228f/Distributi… |
2022-02-12 01:06:30 +0100 | <hololeap> | > These revisions can be thought of as "updating" the cabal file of a package with new or more current information. However, they do not actually update the file. Tarballs retrieved from Hackage are always as the authors uploaded them. Revision information is tracked explicitly in the Hackage index |
2022-02-12 01:07:20 +0100 | <sclv> | so i imagine it just follows the text conventions of the users' system rather than being as uniform as you imagine |
2022-02-12 01:07:53 +0100 | <hololeap> | hm, why would both cabal and wget consistently convert it to CLRF on my linux system then? |
2022-02-12 01:08:06 +0100 | <sclv> | ah here we go: https://stackoverflow.com/questions/14217101/what-character-represents-a-new-line-in-a-text-area |
2022-02-12 01:08:08 +0100 | <geekosaur> | it seemed pretty reliably crlf to me. I still think it's just using html line endings |
2022-02-12 01:08:27 +0100 | <sclv> | By HTML specifications, browsers are required to canonicalize line breaks in user input to CR LF (\r\n), |
2022-02-12 01:09:11 +0100 | <sclv> | so yeah if someone revises using the web form rather than the api, then we just get the canonicalized line breaks and don't bother to do anything to them |
2022-02-12 01:10:09 +0100 | <janus> | oh interesting, so that would probably mean most revisions have mixed line breaks since there are so many linux users in the haskell space |
2022-02-12 01:10:18 +0100 | <sclv> | i.e. geekosaur is correct and gets the "protocol weirdness" challenge coin |
2022-02-12 01:10:29 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-02-12 01:10:52 +0100 | <sclv> | well i don't think they have mixed breaks, because the browser form will canonicalize everything. so its more the first cabal will have one convention, and all revisions have the other |
2022-02-12 01:11:21 +0100 | <janus> | oh, i interpreted "user input" as only being the actual newlines the user made in the form |
2022-02-12 01:11:43 +0100 | <janus> | i.e. not changing the existing |
2022-02-12 01:12:23 +0100 | <geekosaur> | Ieven remember why they did it. cases like someone entering text into netscape (remember that?) and then someone else viewed it on windows |
2022-02-12 01:13:12 +0100 | <geekosaur> | which was netscape ignoring the spec; for historical reasons all the text-y protocols (html, smtp, ftp, etc.) used crlf |
2022-02-12 01:13:33 +0100 | <geekosaur> | (the historical reason being that tcp/ip was first developed on tenex, not unix) |
2022-02-12 01:13:46 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 01:13:46 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 01:13:46 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 01:16:30 +0100 | chenqisu1 | (~chenqisu1@183.217.200.249) |
2022-02-12 01:17:38 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-02-12 01:20:56 +0100 | k8yun | (~k8yun@user/k8yun) (Ping timeout: 256 seconds) |
2022-02-12 01:21:01 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
2022-02-12 01:24:38 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 01:25:01 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) |
2022-02-12 01:27:05 +0100 | <hololeap> | huh, maybe it's not as consistant as I thought... strange: https://dpaste.com/C5HMREFMV |
2022-02-12 01:27:49 +0100 | <hololeap> | those were all downloaded with wget from urls like https://hackage.haskell.org/package/aeson-1.5.6.0/revision/5.cabal |
2022-02-12 01:28:24 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 01:29:25 +0100 | alp | (~alp@user/alp) (Ping timeout: 240 seconds) |
2022-02-12 01:29:41 +0100 | <janus> | hololeap: from a glance, the revisions look like they all have CRLF. so it is consistent with sclv's claim. (though people aren't necessarily only using the web frontend!) |
2022-02-12 01:30:25 +0100 | <hololeap> | do you get CLRF from that aeson revision I just posted? I don't |
2022-02-12 01:30:37 +0100 | <hololeap> | CRLF |
2022-02-12 01:31:18 +0100 | <janus> | did you make it with the web form? |
2022-02-12 01:31:58 +0100 | <hololeap> | I didn't make it |
2022-02-12 01:32:06 +0100 | <janus> | oh you didn't you make the revision, you were referring to your paste :P |
2022-02-12 01:32:20 +0100 | <hololeap> | yeah I'm just a revision consumer :) |
2022-02-12 01:34:12 +0100 | <janus> | hololeap: aeson-1.5.6.0-r1 doesn't contain any carriage return |
2022-02-12 01:35:20 +0100 | <janus> | oh but you meant r5 |
2022-02-12 01:35:49 +0100 | <janus> | same goes for that one |
2022-02-12 01:36:35 +0100 | <janus> | i just use 'xxd 5.cabal | cut -d" " -f2-' though that feels pretty hacky |
2022-02-12 01:38:44 +0100 | <monochrom> | Do you like tr -d '\r' ? |
2022-02-12 01:39:22 +0100 | <hololeap> | dos2unix works great |
2022-02-12 01:39:23 +0100 | Akiva | (~Akiva@user/Akiva) (Ping timeout: 252 seconds) |
2022-02-12 01:39:26 +0100 | shriekingnoise | (~shrieking@201.231.16.156) (Quit: Quit) |
2022-02-12 01:39:46 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-02-12 01:40:45 +0100 | <janus> | monochrom: not sure who's getting asked but i just wanted to get the hex dump without the offsets |
2022-02-12 01:41:13 +0100 | <monochrom> | Oh, nevermind. |
2022-02-12 01:41:26 +0100 | shriekingnoise | (~shrieking@201.231.16.156) |
2022-02-12 01:41:53 +0100 | <janus> | fwiw, i just confirmed that chrome does follow the standard , e.g. it sends \r\n even though the html contains only \r. at least with multipart encoding |
2022-02-12 01:43:16 +0100 | <hololeap> | janus: so it has to do with which browser is used to fill out the revision form? |
2022-02-12 01:43:17 +0100 | zebrag | (~chris@user/zebrag) |
2022-02-12 01:43:39 +0100 | <hololeap> | I'm just curious at this point :p |
2022-02-12 01:44:14 +0100 | Techcable | (~Techcable@168.235.93.147) (Ping timeout: 250 seconds) |
2022-02-12 01:44:30 +0100 | <janus> | nooo, because presumably they all follow the standard. so all browser posted cabal files will have consistent CRLF usage, that's why you see so many. but you can also do revisions with the API as sclv mentions. and if you do it like that, it's just gonna stay as the user's text editor wrote them |
2022-02-12 01:45:53 +0100 | <janus> | if i understand sclv correctly, it all depends on the client since the server isn't caring about it |
2022-02-12 01:46:05 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2022-02-12 01:46:15 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 01:46:35 +0100 | <hololeap> | ok, it all makes sense now |
2022-02-12 01:46:44 +0100 | <janus> | yup |
2022-02-12 01:47:09 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-02-12 01:49:28 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::f276) |
2022-02-12 01:53:07 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 01:53:25 +0100 | <Sqaure> | Im using optics library (that seems to have nearly the same api as Lens). There are (Affine)Traversal's for Map keys (at <key>) and List indices (ix <index>). I wonder, is there such for List that uses a predicate instead of of an index? |
2022-02-12 01:54:41 +0100 | turlando_ | (~turlando@93-42-250-112.ip89.fastwebnet.it) (Ping timeout: 256 seconds) |
2022-02-12 01:55:18 +0100 | turlando | (~turlando@93-42-250-112.ip89.fastwebnet.it) |
2022-02-12 01:55:18 +0100 | turlando | (~turlando@93-42-250-112.ip89.fastwebnet.it) (Changing host) |
2022-02-12 01:55:18 +0100 | turlando | (~turlando@user/turlando) |
2022-02-12 01:57:28 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2022-02-12 01:59:13 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-02-12 02:00:59 +0100 | <hololeap> | like an optics version of find? |
2022-02-12 02:01:08 +0100 | mmhat | (~mmh@55d4c207.access.ecotel.net) (Quit: WeeChat 3.4) |
2022-02-12 02:01:56 +0100 | califax | (~califax@user/califx) (Remote host closed the connection) |
2022-02-12 02:02:24 +0100 | Ariakenom_ | (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Quit: Leaving) |
2022-02-12 02:02:30 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Client Quit) |
2022-02-12 02:03:15 +0100 | califax | (~califax@user/califx) |
2022-02-12 02:04:12 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-02-12 02:04:28 +0100 | <Sqaure> | hololeap, yes |
2022-02-12 02:04:37 +0100 | <hololeap> | I wonder if this is it (I'm not very optics-savvy): https://hackage.haskell.org/package/optics-core-0.4/docs/Optics-AffineFold.html#v:filtered |
2022-02-12 02:05:41 +0100 | <Sqaure> | hololeap, yeah i went that rout, but it seems Fold's arent good as setters? |
2022-02-12 02:07:36 +0100 | <Sqaure> | to be able to do : over (<traversal>) mutatateFkn object |
2022-02-12 02:08:06 +0100 | <dminuoso> | Sqaure: Fold are not good as setters because that's precisely their weakness. |
2022-02-12 02:08:14 +0100 | <dminuoso> | A fold can only fold, not retain structure |
2022-02-12 02:08:32 +0100 | <dminuoso> | What you're asking for is not lawful, a kind of Wither |
2022-02-12 02:09:28 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 02:10:56 +0100 | <EvanR> | the general fold for a type can do anything xD |
2022-02-12 02:10:58 +0100 | <Sqaure> | Oh, to bad. It felt like a predicate would be pretty similar to an index. |
2022-02-12 02:12:12 +0100 | <hololeap> | \s p -> over s (filter p) :: Setter' s [a] -> (a -> Bool) -> s -> s |
2022-02-12 02:12:16 +0100 | <hololeap> | what about that? |
2022-02-12 02:12:40 +0100 | <hololeap> | just modify the list itself instead of trying to get inside of it |
2022-02-12 02:13:28 +0100 | <Sqaure> | Hmm, that could be something |
2022-02-12 02:15:54 +0100 | emf | (~emf@2620:10d:c090:400::5:322c) (Quit: emf) |
2022-02-12 02:18:33 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 02:24:41 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) (Quit: WeeChat 3.4) |
2022-02-12 02:30:57 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 02:31:12 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-02-12 02:31:23 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-02-12 02:37:01 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 02:37:12 +0100 | perrierjouet | (~perrier-j@modemcable012.251-130-66.mc.videotron.ca) |
2022-02-12 02:40:08 +0100 | Techcable | (~Techcable@168.235.93.147) |
2022-02-12 02:40:52 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-02-12 02:42:28 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 02:43:33 +0100 | <jackdk> | Sqaure: the version of `filtered` in lens can be used as a traversal but relies on you to not invalidate the predicate when you set back through it |
2022-02-12 02:44:45 +0100 | <hololeap> | :o |
2022-02-12 02:44:45 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 02:52:09 +0100 | <EvanR> | see if this sounds wrong or not: storable vector uses a foreign ptr to bytes so haskell usage of storable vector has to go through the FFI, but is easily accessible by foreign code, same as ByteString. Meanwhile unboxed array and unboxed vector use array primitives and are more easily accessible to haskell code, but obviously inaccessible to foreign code since gc moves them around |
2022-02-12 02:52:17 +0100 | <hololeap> | at :: e -> Lens' (e -> a) (Maybe a) |
2022-02-12 02:52:34 +0100 | <hololeap> | jackdk: I was thinking they might be able to put something together with this ^ |
2022-02-12 02:53:00 +0100 | HotblackDesiato | (~HotblackD@gateway/tor-sasl/hotblackdesiato) (Ping timeout: 276 seconds) |
2022-02-12 02:53:18 +0100 | <hololeap> | hm, maybe not... I'm not actually sure how that works :p |
2022-02-12 02:54:42 +0100 | HotblackDesiato | (~HotblackD@gateway/tor-sasl/hotblackdesiato) |
2022-02-12 02:55:17 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
2022-02-12 02:56:37 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 240 seconds) |
2022-02-12 02:58:46 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds) |
2022-02-12 02:59:51 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) |
2022-02-12 03:00:20 +0100 | <hololeap> | ix :: e -> Lens' (e -> Maybe a) (Maybe a) |
2022-02-12 03:00:22 +0100 | hololeap | shrugs |
2022-02-12 03:00:35 +0100 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) |
2022-02-12 03:01:07 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 03:03:46 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 03:04:38 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 03:06:34 +0100 | kayvank | (~user@52-119-115-185.PUBLIC.monkeybrains.net) (Ping timeout: 250 seconds) |
2022-02-12 03:06:50 +0100 | xsperry | (~xs@user/xsperry) (Remote host closed the connection) |
2022-02-12 03:06:54 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 03:08:55 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) (Ping timeout: 256 seconds) |
2022-02-12 03:10:48 +0100 | califax- | (~califax@user/califx) |
2022-02-12 03:10:54 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Ping timeout: 250 seconds) |
2022-02-12 03:12:39 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2022-02-12 03:13:19 +0100 | xkuru | (~xkuru@user/xkuru) (Read error: Connection reset by peer) |
2022-02-12 03:14:15 +0100 | harveypwca | (~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) |
2022-02-12 03:14:27 +0100 | califax | (~califax@user/califx) (Ping timeout: 276 seconds) |
2022-02-12 03:14:27 +0100 | califax- | califax |
2022-02-12 03:14:28 +0100 | burnsidesLlama | (~burnsides@dhcp168-030.wadham.ox.ac.uk) (Remote host closed the connection) |
2022-02-12 03:20:14 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 03:21:52 +0100 | <hololeap> | at that point it might just make sense to turn your [a] into a (Map Bool [a]) and then use `at` on it |
2022-02-12 03:22:36 +0100 | gentauro | (~gentauro@user/gentauro) (Read error: Connection reset by peer) |
2022-02-12 03:24:59 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 03:25:45 +0100 | <EvanR> | Map Bool [a] = Bool -> [a] = ([a], [a]) xD |
2022-02-12 03:26:20 +0100 | <EvanR> | (ok, technically no) |
2022-02-12 03:27:33 +0100 | gentauro | (~gentauro@user/gentauro) |
2022-02-12 03:28:06 +0100 | <hololeap> | :t partition -- right, forgot about that |
2022-02-12 03:28:07 +0100 | <lambdabot> | (a -> Bool) -> [a] -> ([a], [a]) |
2022-02-12 03:29:29 +0100 | <EvanR> | the map could be missing one or both |
2022-02-12 03:30:56 +0100 | <hololeap> | :t \k -> maybe [] id . Map.lookup k |
2022-02-12 03:30:57 +0100 | <lambdabot> | error: |
2022-02-12 03:30:57 +0100 | <lambdabot> | Not in scope: ‘Map.lookup’ |
2022-02-12 03:30:57 +0100 | <lambdabot> | Perhaps you meant one of these: |
2022-02-12 03:33:39 +0100 | jao | (~jao@static-68-235-44-40.cust.tzulo.com) |
2022-02-12 03:33:50 +0100 | <EvanR> | :t Data.Map.lookup |
2022-02-12 03:33:51 +0100 | <lambdabot> | Ord k => k -> M.Map k a -> Maybe a |
2022-02-12 03:34:04 +0100 | <EvanR> | oh, M dot |
2022-02-12 03:40:54 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-02-12 03:41:23 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 03:44:39 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 03:48:57 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 240 seconds) |
2022-02-12 03:57:26 +0100 | xff0x | (~xff0x@2001:1a81:5217:8700:5c4c:6e43:a062:eba7) (Ping timeout: 252 seconds) |
2022-02-12 03:58:17 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:7c68:ef8b:b4b7:1f26) |
2022-02-12 03:58:51 +0100 | k8yun | (~k8yun@user/k8yun) |
2022-02-12 03:59:52 +0100 | modnar | (~modnar@shell.sonic.net) (Remote host closed the connection) |
2022-02-12 04:02:47 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 04:03:47 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-02-12 04:05:13 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 04:11:24 +0100 | yauhsien_ | (~yauhsien@61-231-32-103.dynamic-ip.hinet.net) |
2022-02-12 04:11:35 +0100 | slim | (uid300876@id-300876.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2022-02-12 04:15:47 +0100 | yauhsien_ | (~yauhsien@61-231-32-103.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-02-12 04:21:54 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 04:23:38 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:7c68:ef8b:b4b7:1f26) (Ping timeout: 260 seconds) |
2022-02-12 04:23:43 +0100 | jao | (~jao@static-68-235-44-40.cust.tzulo.com) (Ping timeout: 256 seconds) |
2022-02-12 04:24:30 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:4eb7:4d9:8878:178f) |
2022-02-12 04:25:28 +0100 | jao | (~jao@static-68-235-44-72.cust.tzulo.com) |
2022-02-12 04:26:35 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 04:33:57 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-02-12 04:34:05 +0100 | td_ | (~td@94.134.91.17) (Ping timeout: 250 seconds) |
2022-02-12 04:34:37 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) |
2022-02-12 04:35:02 +0100 | kilolympus | (~kilolympu@31.205.200.235) (Read error: Connection reset by peer) |
2022-02-12 04:35:08 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 04:35:44 +0100 | td_ | (~td@94.134.91.27) |
2022-02-12 04:35:49 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Client Quit) |
2022-02-12 04:38:11 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija))) |
2022-02-12 04:38:11 +0100 | finn_elija | (~finn_elij@user/finn-elija/x-0085643) |
2022-02-12 04:38:11 +0100 | finn_elija | FinnElija |
2022-02-12 04:40:43 +0100 | waleee | (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) (Ping timeout: 256 seconds) |
2022-02-12 04:42:25 +0100 | mstksg | (~jle`@cpe-23-240-75-236.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 04:44:04 +0100 | mstksg | (~jle`@cpe-23-240-75-236.socal.res.rr.com) |
2022-02-12 04:44:39 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 04:44:49 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) (Quit: The Lounge - https://thelounge.chat) |
2022-02-12 04:46:03 +0100 | terrorjack | (~terrorjac@2a01:4f8:1c1e:509a::1) |
2022-02-12 04:49:22 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.4) |
2022-02-12 04:53:57 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.4) |
2022-02-12 04:54:38 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 04:57:06 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 04:57:18 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 04:58:36 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Client Quit) |
2022-02-12 04:58:50 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 05:01:22 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 05:01:41 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2022-02-12 05:01:50 +0100 | <ProfSimm> | In Haskell when I perform side-effects, is there some abstraction to guarantee a "Transaction" on the effects, make them atomic. And if so, how would that work with things like sending something over a TCP socket. |
2022-02-12 05:01:52 +0100 | <ProfSimm> | Can't unsend. |
2022-02-12 05:02:21 +0100 | <c_wraith> | you're correct. there's no such thing as making arbitrary effects atomic |
2022-02-12 05:03:28 +0100 | <Maxdamantus> | So `State RealWorld#` is a lie!? |
2022-02-12 05:04:10 +0100 | <ProfSimm> | c_wraith: well not like I was hoping for magic (well, a little), my question is more about is there a way to reason about those in a sane way without atomicity |
2022-02-12 05:06:25 +0100 | <ski> | how do you make exception effects atomic or transactional ? nondeterminism effects ? |
2022-02-12 05:07:22 +0100 | sammelweis | (~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) |
2022-02-12 05:07:42 +0100 | <ProfSimm> | ski: "finally"? |
2022-02-12 05:07:58 +0100 | <ProfSimm> | ski: undo sagas, as a more general concept |
2022-02-12 05:08:02 +0100 | <Maxdamantus> | In general, it's not possible to include something externnal to your transaction within your transaction. |
2022-02-12 05:08:37 +0100 | <ski> | "finally" doesn't undo an exception being thrown |
2022-02-12 05:08:51 +0100 | <Maxdamantus> | Theoretically you could creatu a framuwork where the TCP sending is part of a transaction, but receiving a response from an entity that exists outside can't be part of it. |
2022-02-12 05:11:06 +0100 | <ProfSimm> | ski: my problem isn't the existence of the exception typically, but rather the partial operations and unfreed resources it leaves behind, hence finally. Or did you mean in some other way. Transaction means it can fail, it just failed atomically. Transaction doesn't mean it has to succeed |
2022-02-12 05:11:44 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 05:11:57 +0100 | <ski> | > do z <- [1 ..]; y <- [1 .. z]; x <- [1 .. y]; guard (x^2 + y^2 == z^2); return (x,y,z) -- how do you perform nondeterminism effects like these transactionally, atomically ? what does that even mean, to begin with ? |
2022-02-12 05:12:00 +0100 | <lambdabot> | [(3,4,5),(6,8,10),(5,12,13),(9,12,15),(8,15,17),(12,16,20),(15,20,25),(7,24,... |
2022-02-12 05:12:44 +0100 | <ski> | if you're interacting with the outside world, it does seem hard to make that atomic or transactional, at least without cooperation from the other side |
2022-02-12 05:12:47 +0100 | <ProfSimm> | ski: well I'm just pondering how to deal with non-happy path in a way that doesn't explode into a fractal of special cases. |
2022-02-12 05:13:54 +0100 | <ski> | "my problem isn't the existence of the exception typically" -- well, transactions are about isolating effects, so that either all are performed, or none, do you agree ? |
2022-02-12 05:13:55 +0100 | <ProfSimm> | ski: yes, well hence the "undo saga" note. Sometimes you can code compensatory action that's not literally undo, but you can consider the action semantically undone for your purpose. Such as bill a credit card, then refund it. There's still a fee, but the action is sufficiently "undone" |
2022-02-12 05:14:40 +0100 | <ski> | to "fail" exceptions raising, you'd need some way to undo raising the exceptions |
2022-02-12 05:15:17 +0100 | <ProfSimm> | I don't see exceptions as a side-effect, despite they may not fit into a math model of purity |
2022-02-12 05:15:24 +0100 | <ski> | (raising an exception here is not considered "failure". rather raising exceptions would be the effects that a failure of the transaction would have to undo) |
2022-02-12 05:15:27 +0100 | <ProfSimm> | I see them as syntax sugar on a branch |
2022-02-12 05:15:42 +0100 | <ski> | yea, i've not been talking about any side-effects here |
2022-02-12 05:15:57 +0100 | <ProfSimm> | Well I don't know why we want to undo an exception being risen. |
2022-02-12 05:15:58 +0100 | <ski> | (i've been talking about effects) |
2022-02-12 05:16:11 +0100 | <ProfSimm> | OK I don't see exceptions as an "effect" then |
2022-02-12 05:16:16 +0100 | <ski> | well, you started talking about having transactions of effects |
2022-02-12 05:16:41 +0100 | <ProfSimm> | ski: well I'll be damned. |
2022-02-12 05:16:49 +0100 | <ProfSimm> | ski: I mean side-effects |
2022-02-12 05:16:49 +0100 | <ski> | there are many kinds of effects. I/O, state, exception, (angelic) nondeterminism, environment, summarizing/logging/output, continuation, &c. |
2022-02-12 05:17:01 +0100 | <ProfSimm> | Well I mean external effects basically |
2022-02-12 05:17:05 +0100 | <ski> | there are no side-effects in Haskell, so you must be talking about some other language, then |
2022-02-12 05:17:11 +0100 | <ProfSimm> | Man. |
2022-02-12 05:17:14 +0100 | <ProfSimm> | You know what I mean |
2022-02-12 05:17:44 +0100 | <ski> | ok, external, i guess that means I/O, then |
2022-02-12 05:17:54 +0100 | <ProfSimm> | In a nutshell, files, sockets, pipes. Yes. I/O |
2022-02-12 05:18:01 +0100 | <ProfSimm> | Interaction with the "world" |
2022-02-12 05:18:02 +0100 | <ski> | (sorry, i do not know what you mean) |
2022-02-12 05:18:04 +0100 | <ski> | yes |
2022-02-12 05:18:10 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) (Quit: This computer has gone to sleep) |
2022-02-12 05:19:29 +0100 | <ski> | (i don't know why people often keep saying "you know what i mean". my experience has been that almost always, when people say that, i do not know what they mean. maybe it's a kind of appeal, "you know what i mean, right ?", only not expressed as a question) |
2022-02-12 05:19:56 +0100 | <hololeap> | they assume you're being pedantic on purpose |
2022-02-12 05:20:37 +0100 | <ski> | well, if i am (i'm not sure), then i do not know how not to be that |
2022-02-12 05:21:16 +0100 | <ProfSimm> | hololeap: I don't assume that. But I beg for compassion ;-) |
2022-02-12 05:21:23 +0100 | <ProfSimm> | When using terms incorrectly |
2022-02-12 05:21:38 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 05:21:38 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 05:21:38 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 05:22:22 +0100 | <ProfSimm> | ski: but you did know what I mean (interaction with other systems outside the language internal state) ;-) |
2022-02-12 05:22:59 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 05:23:50 +0100 | <ski> | well, i offered that as one possible thing which you might be aiming at. i didn't know that that was what you were asking about |
2022-02-12 05:24:09 +0100 | <ProfSimm> | ski: cool :) |
2022-02-12 05:24:29 +0100 | <ski> | (you started asking about side-effects. since there are no side-effects in Haskell, i got thinking about effects. next question was *which* effects you wanted to talk about. the most common ones ? only some particular specific ones ?) |
2022-02-12 05:24:36 +0100 | <ProfSimm> | ski: so is there a strategy here, or we deal with things on a one-by-one basis (effects) |
2022-02-12 05:25:02 +0100 | <ski> | i'm not aware of any general framework for isolating effects transactionally |
2022-02-12 05:25:26 +0100 | <ski> | if we're talking about internal state, then there's `STM' (Software-Transactional Memory), for that |
2022-02-12 05:26:03 +0100 | <ski> | (which composes well with multiple executing threads) |
2022-02-12 05:26:48 +0100 | <ski> | if you're doing I/O, say communicating between some servers on different machines, doing some kind of distributed computation, then you might be able to do transaction management, if you control all those nodes |
2022-02-12 05:26:57 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 05:27:38 +0100 | <ski> | (i think there might be sortof-general patterns for that sort of thing, in the Erlang community) |
2022-02-12 05:28:57 +0100 | <ski> | (btw, the reason i said i'm not sure before is that i think i mostly don't understand myself. this includes not knowing all my motivations) |
2022-02-12 05:29:20 +0100 | <hololeap> | I assume something like postgres knows how to do this |
2022-02-12 05:29:31 +0100 | <ProfSimm> | Sure, SQL servers are the easy part |
2022-02-12 05:30:15 +0100 | <hololeap> | as far as making it a monad of some sort, unfortunately abstractions like "monad" either fit or they don't, and generally they don't |
2022-02-12 05:30:35 +0100 | <ProfSimm> | ski: I was thinking more about how to organize my code in Haskell around that idiom of there being code that does something, and code that undoes it, and let the right "bits of code" run depending on which code failed or not etc. |
2022-02-12 05:32:02 +0100 | <ProfSimm> | ski: let's say I'm programming an online store. I bill a card, then i check product for availability - error, no availability (I know, shoulda checked beforehand), so I raise an exception, this automatically enums all actions I did so far, and runs their 'undo code' automatically, which refunds the payment in this case |
2022-02-12 05:33:02 +0100 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds) |
2022-02-12 05:33:08 +0100 | <ski> | yea, monads "merely" express "(dynamic) sequencing" ("sequencing" in a more abstract, conceptual way, not necessarily in a low-level operational sense. one possible meaning of "sequencing" is "short-circuiting". another is "loop nesting". another is "callback nesting". &c.) |
2022-02-12 05:35:12 +0100 | jao | (~jao@static-68-235-44-72.cust.tzulo.com) (Ping timeout: 250 seconds) |
2022-02-12 05:35:57 +0100 | Unicorn_Princess | (~Unicorn_P@93-103-228-248.dynamic.t-2.net) (Quit: Leaving) |
2022-02-12 05:36:50 +0100 | <hololeap> | ProfSimm: you could build this yourself pretty easily I would think |
2022-02-12 05:37:38 +0100 | deadmarshal | (~deadmarsh@95.38.112.73) |
2022-02-12 05:38:25 +0100 | <hololeap> | :t \l1 l2 -> zip l1 (drop 1 l2) |
2022-02-12 05:38:26 +0100 | <lambdabot> | [a] -> [b] -> [(a, b)] |
2022-02-12 05:39:08 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 05:39:52 +0100 | ProfSimm | nods at hololeap |
2022-02-12 05:39:57 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 05:40:03 +0100 | <ski> | hm, i remember i once did a play/replay system (to be used with a CGI page with forms). from the point of the program using the library, doing a form, getting the answer back, just looked like executing an action. but under the covers, it'd record enough of the state of the system, and then generate a page with a form on it, so that, if/when the form was submitted, the program would restart, and hit the |
2022-02-12 05:40:09 +0100 | <ski> | "replay" phase, fast-forwarding past all the previously done parts (only simulating performing `IO' actions, by reading a logged result), until it got to the point where it stopped last time, and then it hit the "play" phase, starting to execute normally |
2022-02-12 05:40:32 +0100 | <hololeap> | :t \l -> zip l (drop 1 l) -- if l is a stream of events from IO, this will give you a stream (modeled as a list) of (lastEvent, currentEvent) |
2022-02-12 05:40:33 +0100 | <lambdabot> | [b] -> [(b, b)] |
2022-02-12 05:42:00 +0100 | <ski> | this is not quite the sort of thing you were thinking of. but i think one could possibly try to do something similar, with "undo" actions stored, rather than "replay" |
2022-02-12 05:45:30 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 06:00:55 +0100 | motherfsck | (~motherfsc@user/motherfsck) (Quit: quit) |
2022-02-12 06:03:37 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 06:07:11 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 06:11:10 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds) |
2022-02-12 06:23:38 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 06:27:49 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 06:35:51 +0100 | <Andrew> | If you are using GHC 6.10.x, just cabal install lambdabot. 6.12.x support is forthcoming; see /Building for details on that. (It is possible that Hackage lambdabot will just work with 6.12.x.) / I think I'm on 8.10.4 now, seems a bit outdated |
2022-02-12 06:38:16 +0100 | phma_ | (phma@2001:5b0:210d:70f8:60e0:e2f9:8ba1:2fd7) (Read error: Connection reset by peer) |
2022-02-12 06:38:27 +0100 | <Andrew> | Seems that cabal isn't complaining installing lambdabot yet |
2022-02-12 06:38:40 +0100 | phma_ | (~phma@host-67-44-208-185.hnremote.net) |
2022-02-12 06:39:04 +0100 | gawen_ | (~gawen@user/gawen) (Quit: cya) |
2022-02-12 06:40:03 +0100 | phma_ | phma |
2022-02-12 06:40:22 +0100 | gawen | (~gawen@user/gawen) |
2022-02-12 06:44:41 +0100 | ldlework | (~hexeme@user/hexeme) (Remote host closed the connection) |
2022-02-12 06:44:48 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 06:46:01 +0100 | hexeme | (~hexeme@user/hexeme) |
2022-02-12 06:49:51 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 06:50:36 +0100 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2022-02-12 06:53:56 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2022-02-12 06:54:47 +0100 | mvk | (~mvk@2607:fea8:5cdc:bf00::f276) (Ping timeout: 256 seconds) |
2022-02-12 07:02:44 +0100 | raym | (~raym@user/raym) (Quit: kernel update, rebooting...) |
2022-02-12 07:03:22 +0100 | foul_owl | (~kerry@174-21-76-71.tukw.qwest.net) (Quit: WeeChat 2.3) |
2022-02-12 07:06:53 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 07:10:21 +0100 | foul_owl | (~kerry@174-21-76-71.tukw.qwest.net) |
2022-02-12 07:12:11 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2022-02-12 07:15:18 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 07:19:49 +0100 | raym | (~raym@user/raym) |
2022-02-12 07:22:25 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 07:22:25 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 07:22:25 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 07:25:30 +0100 | k8yun | (~k8yun@user/k8yun) (Quit: Leaving) |
2022-02-12 07:27:34 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 07:33:31 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 07:39:17 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 07:39:28 +0100 | shapr | (~user@pool-173-73-44-186.washdc.fios.verizon.net) (Ping timeout: 256 seconds) |
2022-02-12 07:53:49 +0100 | zaquest | (~notzaques@5.130.79.72) (Remote host closed the connection) |
2022-02-12 07:54:57 +0100 | zaquest | (~notzaques@5.130.79.72) |
2022-02-12 07:55:51 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:9142:26a8:3892:1b3a) (Remote host closed the connection) |
2022-02-12 07:56:57 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 08:00:40 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 08:06:25 +0100 | hexeme | ldlework |
2022-02-12 08:08:15 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 08:09:55 +0100 | fef | (~thedawn@user/thedawn) |
2022-02-12 08:10:33 +0100 | jonathanx_ | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) |
2022-02-12 08:11:37 +0100 | jonathanx | (~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 250 seconds) |
2022-02-12 08:18:34 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 08:23:12 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 08:32:10 +0100 | deadmarshal | (~deadmarsh@95.38.112.73) (Ping timeout: 256 seconds) |
2022-02-12 08:40:42 +0100 | eggplantade | (~Eggplanta@108-201-191-115.lightspeed.sntcca.sbcglobal.net) (Remote host closed the connection) |
2022-02-12 08:40:49 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) |
2022-02-12 08:41:05 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 08:41:57 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-02-12 08:42:57 +0100 | phma | (~phma@host-67-44-208-185.hnremote.net) (Read error: Connection reset by peer) |
2022-02-12 08:43:50 +0100 | alp | (~alp@user/alp) |
2022-02-12 08:44:04 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 08:44:11 +0100 | phma | (~phma@host-67-44-208-247.hnremote.net) |
2022-02-12 08:45:20 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 08:55:18 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 08:59:04 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 09:00:15 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 09:01:21 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 09:02:02 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 09:03:54 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2022-02-12 09:05:45 +0100 | Graham31415 | (~Graham314@213.237.92.153) |
2022-02-12 09:06:38 +0100 | whound | (~dust@2409:4071:4d8d:7b21:2586:8c37:2856:667a) |
2022-02-12 09:08:11 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 09:16:06 +0100 | zincy | (~tom@host86-160-236-152.range86-160.btcentralplus.com) (Remote host closed the connection) |
2022-02-12 09:16:23 +0100 | zincy | (~tom@2a00:23c8:970c:4801:5b6a:e81b:79dc:f684) |
2022-02-12 09:20:38 +0100 | yauhsien_ | (~yauhsien@61-231-32-103.dynamic-ip.hinet.net) |
2022-02-12 09:21:13 +0100 | vglfr | (~vglfr@coupling.penchant.volia.net) (Ping timeout: 256 seconds) |
2022-02-12 09:21:20 +0100 | max22- | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) |
2022-02-12 09:21:59 +0100 | vglfr | (~vglfr@coupling.penchant.volia.net) |
2022-02-12 09:22:47 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-02-12 09:25:45 +0100 | yauhsien_ | (~yauhsien@61-231-32-103.dynamic-ip.hinet.net) (Ping timeout: 256 seconds) |
2022-02-12 09:26:36 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 09:27:53 +0100 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) |
2022-02-12 09:30:16 +0100 | zeenk | (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) |
2022-02-12 09:30:39 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 09:30:39 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 09:32:48 +0100 | senoraraton | (~senorarat@192-195-83-130.static.monkeybrains.net) (Remote host closed the connection) |
2022-02-12 09:34:20 +0100 | sqrt2 | (~ben@80-108-18-7.cable.dynamic.surfer.at) (Quit: ZNC - http://znc.in) |
2022-02-12 09:36:57 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) |
2022-02-12 09:39:28 +0100 | vysn | (~vysn@user/vysn) |
2022-02-12 09:41:12 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) |
2022-02-12 09:45:17 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 240 seconds) |
2022-02-12 09:48:45 +0100 | alp | (~alp@user/alp) (Ping timeout: 256 seconds) |
2022-02-12 09:49:08 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 09:49:40 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:b88b:16c0:25d0:773a) |
2022-02-12 09:52:23 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2022-02-12 10:00:42 +0100 | cosimone | (~user@93-44-184-23.ip98.fastwebnet.it) |
2022-02-12 10:00:42 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 10:04:51 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 10:13:46 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2022-02-12 10:15:22 +0100 | ardell | (~ardell@user/ardell) |
2022-02-12 10:17:30 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-98.elisa-laajakaista.fi) |
2022-02-12 10:18:43 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 10:18:59 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 10:23:01 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 10:23:25 +0100 | tfeb | (~tfb@88.98.95.237) |
2022-02-12 10:24:21 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-02-12 10:25:54 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2022-02-12 10:28:32 +0100 | tfeb | (~tfb@88.98.95.237) (Quit: died) |
2022-02-12 10:32:40 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2022-02-12 10:32:45 +0100 | zeenk | (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!) |
2022-02-12 10:33:57 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 240 seconds) |
2022-02-12 10:35:01 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
2022-02-12 10:38:50 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Remote host closed the connection) |
2022-02-12 10:39:01 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 10:39:01 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 10:39:01 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 10:39:16 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) |
2022-02-12 10:41:29 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:b88b:16c0:25d0:773a) (Quit: Leaving) |
2022-02-12 10:41:36 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 10:42:04 +0100 | alp | (~alp@user/alp) |
2022-02-12 10:43:58 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2022-02-12 10:44:48 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 10:47:53 +0100 | xsperry | (~xs@user/xsperry) |
2022-02-12 10:49:23 +0100 | whound | dust__ |
2022-02-12 10:49:26 +0100 | dust__ | dust_ |
2022-02-12 11:01:57 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 11:05:09 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 11:07:46 +0100 | Graham31415 | (~Graham314@213.237.92.153) (Quit: Client closed) |
2022-02-12 11:14:48 +0100 | fef | (~thedawn@user/thedawn) (Ping timeout: 276 seconds) |
2022-02-12 11:15:20 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2022-02-12 11:21:40 +0100 | chenqisu1 | (~chenqisu1@183.217.200.249) (Quit: Leaving) |
2022-02-12 11:23:34 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 11:23:38 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
2022-02-12 11:24:26 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 11:27:27 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 11:28:03 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 11:34:43 +0100 | mastarija | (~mastarija@2a05:4f46:e04:6000:2c:c10d:58d8:d23b) |
2022-02-12 11:37:45 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 11:40:23 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 11:46:43 +0100 | lottaquestions_ | (~nick@2607:fa49:5041:a200:78c8:bb9f:f5b1:85aa) (Quit: Konversation terminated!) |
2022-02-12 11:49:00 +0100 | noiobeforebed | (~noiobefor@2001:470:69fc:105::1:3c2d) (Quit: Reconnecting) |
2022-02-12 11:49:27 +0100 | dust_ | (~dust@2409:4071:4d8d:7b21:2586:8c37:2856:667a) (Quit: Konversation terminated!) |
2022-02-12 11:49:56 +0100 | cynomys | (~cynomys@user/cynomys) (Ping timeout: 256 seconds) |
2022-02-12 11:51:20 +0100 | alp | (~alp@user/alp) (Ping timeout: 250 seconds) |
2022-02-12 11:57:29 +0100 | coot | (~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot) |
2022-02-12 11:57:56 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 11:58:36 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 12:02:43 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds) |
2022-02-12 12:02:43 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 12:02:54 +0100 | zeenk | (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) |
2022-02-12 12:04:04 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2022-02-12 12:04:13 +0100 | Cale | (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) (Ping timeout: 240 seconds) |
2022-02-12 12:07:02 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 12:09:30 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) |
2022-02-12 12:09:38 +0100 | cosimone | (~user@93-44-184-23.ip98.fastwebnet.it) (Remote host closed the connection) |
2022-02-12 12:09:53 +0100 | Graham31415 | (~Graham314@213.237.92.153) |
2022-02-12 12:10:29 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2022-02-12 12:10:46 +0100 | shailangsa | (~shailangs@host217-39-45-199.range217-39.btcentralplus.com) () |
2022-02-12 12:13:41 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 245 seconds) |
2022-02-12 12:16:18 +0100 | mastarija | (~mastarija@2a05:4f46:e04:6000:2c:c10d:58d8:d23b) (Quit: Leaving) |
2022-02-12 12:17:23 +0100 | Cale | (~cale@cpef48e38ee8583-cm30b7d4b3fc20.cpe.net.cable.rogers.com) |
2022-02-12 12:18:26 +0100 | <Andrew> | Anyone has an idea on installing and using lambdabot properly? I cabel'ed it, and I'm confused what to do |
2022-02-12 12:18:36 +0100 | <Andrew> | It seems to take me to a REPL where I don't have an idea what to put into |
2022-02-12 12:18:50 +0100 | <absentia> | @help |
2022-02-12 12:18:50 +0100 | <lambdabot> | help <command>. Ask for help for <command>. Try 'list' for all commands |
2022-02-12 12:18:55 +0100 | <absentia> | @pl (\x -> x) |
2022-02-12 12:18:55 +0100 | <lambdabot> | id |
2022-02-12 12:19:49 +0100 | <Andrew> | Well, I mean I'm trying to host lambdabot, and my inability to understand how to run it after cabeling is the problem |
2022-02-12 12:21:08 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 12:21:10 +0100 | <absentia> | blech |
2022-02-12 12:21:19 +0100 | <absentia> | no stack for lambdabot? |
2022-02-12 12:21:21 +0100 | <absentia> | :( |
2022-02-12 12:22:03 +0100 | <absentia> | isn't there a cabal run |
2022-02-12 12:22:11 +0100 | <absentia> | good luck sorting out your dependencies |
2022-02-12 12:22:13 +0100 | <sshine> | I've heard cabal is really easy. :P |
2022-02-12 12:22:23 +0100 | <absentia> | sshine: it's easy until it isn't |
2022-02-12 12:22:33 +0100 | <absentia> | Andrew: what happens if you `cabal run` |
2022-02-12 12:23:09 +0100 | <sshine> | apparently there are no installation instructions for lambdabot. that seems like a useful addition. |
2022-02-12 12:23:20 +0100 | <absentia> | https://wiki.haskell.org/Lambdabot#Installing |
2022-02-12 12:23:32 +0100 | <Andrew> | #installing, but no #running or anything like that |
2022-02-12 12:23:33 +0100 | <sshine> | ah, okay. I was looking at github. |
2022-02-12 12:23:35 +0100 | <absentia> | there are marginal instructions |
2022-02-12 12:23:37 +0100 | <Andrew> | I don't see configuration options |
2022-02-12 12:23:46 +0100 | <Andrew> | Error: |
2022-02-12 12:23:48 +0100 | <Andrew> | [ERROR] Plugin.djinn: Djinn command failed: djinn: readCreateProcess: runInteractiveProcess: exec: does not exist (No such file or directory) |
2022-02-12 12:23:59 +0100 | Andrew | looks for a ebuild of "djinn" |
2022-02-12 12:24:11 +0100 | <absentia> | choo choo |
2022-02-12 12:24:17 +0100 | <absentia> | all stations stop to next build error |
2022-02-12 12:24:19 +0100 | <Andrew> | Doesn't pull that as a dep, weird |
2022-02-12 12:24:35 +0100 | <Andrew> | k, emerging that now |
2022-02-12 12:24:44 +0100 | absentia | gives the nod of approval |
2022-02-12 12:24:49 +0100 | <absentia> | i too used to funroll my loops |
2022-02-12 12:25:16 +0100 | <sshine> | absentia, those installation instructions make assumptions about GHC that are two major versions behind what I've got... |
2022-02-12 12:25:17 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 12:25:17 +0100 | OscarZ | (~oscarz@95.175.104.142) (Quit: Leaving) |
2022-02-12 12:25:27 +0100 | <Andrew> | still having djinn problems, fun |
2022-02-12 12:25:28 +0100 | <absentia> | sshine: hence my questioning of a stack build |
2022-02-12 12:25:42 +0100 | <Andrew> | wait, wth I didn't add ~/.cabal/bin to my PATH |
2022-02-12 12:25:45 +0100 | <sshine> | cabal: Unknown target '.'. There is no component '.'. The project has no package directory '.'. |
2022-02-12 12:25:45 +0100 | <absentia> | they still offer lts package trees for older versions of GHC |
2022-02-12 12:25:52 +0100 | <sshine> | I don't think this software was meant to be run by many people. |
2022-02-12 12:25:56 +0100 | <absentia> | probably not |
2022-02-12 12:26:02 +0100 | <absentia> | which is fine |
2022-02-12 12:26:05 +0100 | <absentia> | it works here |
2022-02-12 12:27:23 +0100 | <sshine> | Andrew, there's an attempt at documentation of running it here: https://github.com/lambdabot/lambdabot/blob/master/doc/startup.md -- but it doesn't really start from the point of successfully having installed it. |
2022-02-12 12:27:48 +0100 | <Andrew> | thanks, ill check it our |
2022-02-12 12:27:50 +0100 | <Andrew> | *out |
2022-02-12 12:29:50 +0100 | <sshine> | I think I gave up on installing lambdabot one time. |
2022-02-12 12:30:37 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 12:30:40 +0100 | haskl | (~haskl@user/haskl) (Read error: Connection reset by peer) |
2022-02-12 12:32:48 +0100 | <Andrew> | Maybe I'll Just do Nothing with it |
2022-02-12 12:33:03 +0100 | haskl | (~haskl@user/haskl) |
2022-02-12 12:37:51 +0100 | acidsys | (~LSD@2a03:4000:55:d20::3) (Excess Flood) |
2022-02-12 12:39:25 +0100 | acidsys | (~LSD@2a03:4000:55:d20::3) |
2022-02-12 12:41:01 +0100 | tcard | (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) (Remote host closed the connection) |
2022-02-12 12:41:17 +0100 | tcard | (~tcard@p2878075-ipngn18701hodogaya.kanagawa.ocn.ne.jp) |
2022-02-12 12:42:18 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 12:42:23 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 12:43:45 +0100 | Ariakenom | (~Ariakenom@2001:9b1:efe:9d00:91:c891:6ad5:7a10) |
2022-02-12 12:45:03 +0100 | michalz | (~michalz@185.246.204.65) |
2022-02-12 12:45:52 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 12:46:12 +0100 | Midjak | (~Midjak@may53-1-78-226-116-92.fbx.proxad.net) |
2022-02-12 12:47:12 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2022-02-12 12:48:10 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2022-02-12 12:53:39 +0100 | Ariakenom_ | (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) |
2022-02-12 12:53:48 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 12:55:39 +0100 | fef | (~thedawn@user/thedawn) |
2022-02-12 12:57:26 +0100 | Ariakenom | (~Ariakenom@2001:9b1:efe:9d00:91:c891:6ad5:7a10) (Ping timeout: 245 seconds) |
2022-02-12 12:58:15 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 13:00:51 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 13:03:55 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 13:04:34 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 250 seconds) |
2022-02-12 13:05:37 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 256 seconds) |
2022-02-12 13:07:30 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 13:09:58 +0100 | Axman6 | (~Axman6@user/axman6) (*.net *.split) |
2022-02-12 13:09:58 +0100 | tubogram4 | (~tubogram@user/tubogram) (*.net *.split) |
2022-02-12 13:10:04 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 13:11:48 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) |
2022-02-12 13:13:55 +0100 | mmhat | (~mmh@55d4ce4d.access.ecotel.net) |
2022-02-12 13:14:22 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 13:23:31 +0100 | max22- | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 256 seconds) |
2022-02-12 13:23:56 +0100 | alx741 | (~alx741@181.199.42.143) |
2022-02-12 13:28:39 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 13:35:16 +0100 | alx741 | (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
2022-02-12 13:35:55 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-02-12 13:36:30 +0100 | ardell | (~ardell@user/ardell) (Quit: Konversation terminated!) |
2022-02-12 13:38:17 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2022-02-12 13:40:48 +0100 | notzmv | (~zmv@user/notzmv) |
2022-02-12 13:44:15 +0100 | alp | (~alp@user/alp) |
2022-02-12 13:47:01 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2022-02-12 13:50:00 +0100 | whatsupdoc | (uid509081@id-509081.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2022-02-12 13:51:00 +0100 | zer0bitz | (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9) |
2022-02-12 13:52:23 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 13:55:48 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 13:58:27 +0100 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2022-02-12 13:58:43 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection) |
2022-02-12 13:58:44 +0100 | fef | (~thedawn@user/thedawn) (Remote host closed the connection) |
2022-02-12 13:59:22 +0100 | fef | (~thedawn@user/thedawn) |
2022-02-12 13:59:38 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-02-12 13:59:49 +0100 | hololeap | (~hololeap@user/hololeap) |
2022-02-12 14:00:12 +0100 | fef | (~thedawn@user/thedawn) (Client Quit) |
2022-02-12 14:02:10 +0100 | xkuru | (~xkuru@user/xkuru) |
2022-02-12 14:04:42 +0100 | zer0bitz_ | (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9) |
2022-02-12 14:07:50 +0100 | zer0bitz | (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9) (Ping timeout: 250 seconds) |
2022-02-12 14:08:45 +0100 | thevishy | (~Nishant@2405:201:f005:c007:68d4:2777:c323:aa1b) |
2022-02-12 14:12:26 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 14:13:26 +0100 | thevishy | (~Nishant@2405:201:f005:c007:68d4:2777:c323:aa1b) (Client Quit) |
2022-02-12 14:14:29 +0100 | zer0bitz_ | zer0bitz |
2022-02-12 14:15:59 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 14:17:01 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds) |
2022-02-12 14:19:50 +0100 | zeenk | (~zeenk@2a02:2f04:a30d:1300:51a3:bcfc:6cda:9fc5) (Quit: Konversation terminated!) |
2022-02-12 14:19:58 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 14:20:09 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 14:20:59 +0100 | jao | (~jao@68.235.43.85) |
2022-02-12 14:26:39 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 14:31:11 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 14:31:12 +0100 | ubert | (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) (Quit: ubert) |
2022-02-12 14:31:17 +0100 | tubogram4 | (~tubogram@user/tubogram) |
2022-02-12 14:31:17 +0100 | Axman6 | (~Axman6@user/axman6) |
2022-02-12 14:31:17 +0100 | calcium.libera.chat | +o Axman6 |
2022-02-12 14:31:39 +0100 | ubert | (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) |
2022-02-12 14:32:57 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 240 seconds) |
2022-02-12 14:34:53 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 14:35:09 +0100 | jao | (~jao@68.235.43.85) (Ping timeout: 256 seconds) |
2022-02-12 14:35:10 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) |
2022-02-12 14:35:37 +0100 | Koen | (~Koen@252.248.88.92.rev.sfr.net) |
2022-02-12 14:35:41 +0100 | <Koen> | hi |
2022-02-12 14:36:21 +0100 | <Hecate> | hi |
2022-02-12 14:36:23 +0100 | <Koen> | I have a question about groupBy |
2022-02-12 14:36:40 +0100 | <Koen> | the documentation says it compares adjacent elements: https://hackage.haskell.org/package/groupBy-0.1.0.0/docs/Data-List-GroupBy.html |
2022-02-12 14:36:45 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 14:36:52 +0100 | <Hecate> | indeed it does |
2022-02-12 14:36:56 +0100 | <Koen> | I tried their example groupBy (<=) [1,2,2,3,1,2,0,4,5,2] |
2022-02-12 14:37:09 +0100 | <Koen> | and I get a different result than the documentation |
2022-02-12 14:37:20 +0100 | <Hecate> | which version of the package are you importing? |
2022-02-12 14:37:39 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Read error: Connection reset by peer) |
2022-02-12 14:37:41 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) |
2022-02-12 14:38:03 +0100 | <Koen> | I have ghci 9.0.2; not sure about the version of the import |
2022-02-12 14:38:15 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) |
2022-02-12 14:38:22 +0100 | <Hecate> | Koen: what you're linking to is a package on Hackage, the community repository |
2022-02-12 14:38:34 +0100 | <Koen> | okay |
2022-02-12 14:38:35 +0100 | <Hecate> | so, you have to get that package as a dependency |
2022-02-12 14:38:58 +0100 | <Koen> | ooooooh |
2022-02-12 14:39:10 +0100 | <Hecate> | > This module provides an alternative definition for groupBy which does not require a transitive equivalence predicate. |
2022-02-12 14:39:10 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 14:39:11 +0100 | <lambdabot> | <hint>:1:6: error: parse error on input ‘module’ |
2022-02-12 14:39:17 +0100 | <Koen> | yes |
2022-02-12 14:39:18 +0100 | <Hecate> | looks like you've been using the original groupBy |
2022-02-12 14:39:25 +0100 | <Hecate> | instead of the package you're looking at |
2022-02-12 14:39:29 +0100 | <Koen> | fair enough |
2022-02-12 14:40:42 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 14:44:29 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 14:44:39 +0100 | <Arsen> | what could cause a package (https://github.com/kowainik/tomland/) not to appear in stackage nightly anymore |
2022-02-12 14:45:01 +0100 | <geekosaur> | usually it stopped building and they can't contact the maintainer to get it fixed |
2022-02-12 14:46:27 +0100 | <Arsen> | oh it may be a revdep |
2022-02-12 14:46:31 +0100 | <Arsen> | megaparsec is also gone |
2022-02-12 14:47:14 +0100 | <Arsen> | wait, nvm, it's there |
2022-02-12 14:47:57 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 240 seconds) |
2022-02-12 14:49:53 +0100 | Ariakenom_ | (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) (Ping timeout: 256 seconds) |
2022-02-12 14:50:05 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 14:50:08 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-02-12 14:50:59 +0100 | zer0bitz_ | (~zer0bitz@2001:2003:f74d:b800:78e9:2c9a:5431:d092) |
2022-02-12 14:53:37 +0100 | absentia | (~absentia@user/absentia) (Quit: WeeChat 3.4) |
2022-02-12 14:54:37 +0100 | Megant | (megant@user/megant) (Ping timeout: 240 seconds) |
2022-02-12 14:55:02 +0100 | zer0bitz | (~zer0bitz@2001:2003:f74d:b800:1823:ee83:7026:65a9) (Ping timeout: 260 seconds) |
2022-02-12 14:55:41 +0100 | absentia | (~absentia@user/absentia) |
2022-02-12 14:56:07 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds) |
2022-02-12 14:56:39 +0100 | Megant | (megant@user/megant) |
2022-02-12 14:57:01 +0100 | Ariakenom_ | (~Ariakenom@2001:9b1:efe:9d00:8937:70ea:8741:6137) |
2022-02-12 14:57:28 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 14:58:09 +0100 | wolfshappen | (~waff@irc.furworks.de) (Ping timeout: 256 seconds) |
2022-02-12 14:58:45 +0100 | wolfshappen | (~waff@irc.furworks.de) |
2022-02-12 15:01:40 +0100 | shailangsa | (~shailangs@host109-159-108-227.range109-159.btcentralplus.com) |
2022-02-12 15:01:40 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 15:01:53 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Remote host closed the connection) |
2022-02-12 15:01:55 +0100 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2022-02-12 15:01:58 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2022-02-12 15:02:18 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2022-02-12 15:02:36 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 15:02:48 +0100 | shapr | (~user@pool-173-73-44-186.washdc.fios.verizon.net) |
2022-02-12 15:03:14 +0100 | hololeap | (~hololeap@user/hololeap) |
2022-02-12 15:04:34 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 15:05:06 +0100 | ober | (~ober@c-73-68-74-41.hsd1.ma.comcast.net) |
2022-02-12 15:05:27 +0100 | fef | (~thedawn@user/thedawn) |
2022-02-12 15:05:33 +0100 | ober | (~ober@c-73-68-74-41.hsd1.ma.comcast.net) (Client Quit) |
2022-02-12 15:05:54 +0100 | alp | (~alp@user/alp) (Ping timeout: 250 seconds) |
2022-02-12 15:06:08 +0100 | ubert | (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) (Quit: ubert) |
2022-02-12 15:06:31 +0100 | ubert | (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) |
2022-02-12 15:07:09 +0100 | Ariakenom__ | (~Ariakenom@h-82-196-111-63.NA.cust.bahnhof.se) |
2022-02-12 15:08:42 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-02-12 15:09:39 +0100 | ubert | (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) (Remote host closed the connection) |
2022-02-12 15:09:58 +0100 | ubert | (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) |
2022-02-12 15:11:22 +0100 | Ariakenom_ | (~Ariakenom@2001:9b1:efe:9d00:8937:70ea:8741:6137) (Ping timeout: 260 seconds) |
2022-02-12 15:14:13 +0100 | ubert | (~Thunderbi@p200300ecdf09947e2c357846a3b3453e.dip0.t-ipconnect.de) (Ping timeout: 240 seconds) |
2022-02-12 15:18:02 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) |
2022-02-12 15:18:28 +0100 | ubert | (~Thunderbi@p548c8cd6.dip0.t-ipconnect.de) |
2022-02-12 15:20:00 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 15:22:13 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 240 seconds) |
2022-02-12 15:22:45 +0100 | waleee | (~waleee@h-98-128-229-110.NA.cust.bahnhof.se) |
2022-02-12 15:23:40 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:4eb7:4d9:8878:178f) (Ping timeout: 250 seconds) |
2022-02-12 15:23:41 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 15:24:45 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:f091:6df4:fb78:756f) |
2022-02-12 15:26:20 +0100 | <janus> | Arsen: aeson-2 just got merged into nightly so anything that isn't aeson-2 compatible is gone |
2022-02-12 15:26:35 +0100 | Kaipi | (~Kaiepi@156.34.47.253) (Remote host closed the connection) |
2022-02-12 15:26:57 +0100 | <janus> | there is usually a comment in build-constraints.yaml that shows why the package was disabled |
2022-02-12 15:27:06 +0100 | Kaipi | (~Kaiepi@156.34.47.253) |
2022-02-12 15:31:26 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 260 seconds) |
2022-02-12 15:31:56 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 15:32:55 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) |
2022-02-12 15:35:48 +0100 | Graham31415 | (~Graham314@213.237.92.153) (Ping timeout: 256 seconds) |
2022-02-12 15:40:15 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 15:40:53 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 256 seconds) |
2022-02-12 15:41:33 +0100 | max22- | (~maxime@2a01cb08833598002f7f8e76f08da118.ipv6.abo.wanadoo.fr) |
2022-02-12 15:42:21 +0100 | __monty__ | (~toonn@user/toonn) |
2022-02-12 15:43:33 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 15:47:56 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 15:51:37 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2022-02-12 15:53:33 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Remote host closed the connection) |
2022-02-12 15:53:57 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) |
2022-02-12 16:00:16 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 16:00:18 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) |
2022-02-12 16:00:24 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds) |
2022-02-12 16:03:50 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 16:11:10 +0100 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) (Ping timeout: 256 seconds) |
2022-02-12 16:12:51 +0100 | motherfsck | (~motherfsc@user/motherfsck) |
2022-02-12 16:17:58 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 16:19:06 +0100 | cosimone | (~user@2001:b07:ae5:db26:c24a:d20:4d91:1e20) (Remote host closed the connection) |
2022-02-12 16:20:18 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 16:22:11 +0100 | CiaoSen | (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) |
2022-02-12 16:22:30 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Ping timeout: 256 seconds) |
2022-02-12 16:23:02 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 16:23:57 +0100 | skewerr | (spoonm@inaba.spoonm.org) (Read error: Connection reset by peer) |
2022-02-12 16:24:10 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 16:24:10 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 16:24:10 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 16:27:20 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) |
2022-02-12 16:28:39 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2022-02-12 16:29:24 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) (Ping timeout: 276 seconds) |
2022-02-12 16:30:14 +0100 | motherfsck | (~motherfsc@user/motherfsck) (Ping timeout: 260 seconds) |
2022-02-12 16:41:00 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 16:42:40 +0100 | cosimone | (~user@93-44-184-23.ip98.fastwebnet.it) |
2022-02-12 16:42:55 +0100 | stiell | (~stiell@gateway/tor-sasl/stiell) |
2022-02-12 16:43:27 +0100 | motherfsck | (~motherfsc@user/motherfsck) |
2022-02-12 16:45:02 +0100 | kilolympus | (~kilolympu@31.205.200.235) |
2022-02-12 16:46:48 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 16:47:17 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 16:51:31 +0100 | ix | (~ix@213.205.241.13) |
2022-02-12 16:56:30 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 16:58:33 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 17:05:34 +0100 | alx741 | (~alx741@181.199.42.143) |
2022-02-12 17:05:46 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:f091:6df4:fb78:756f) (Ping timeout: 245 seconds) |
2022-02-12 17:06:13 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 17:07:21 +0100 | off^ | (~off@50.235.176.163) |
2022-02-12 17:07:57 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 17:09:23 +0100 | mikoto-chan | (~mikoto-ch@213.177.151.239) (Ping timeout: 250 seconds) |
2022-02-12 17:11:27 +0100 | alx741 | (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
2022-02-12 17:11:34 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 17:12:03 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 17:14:28 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 17:16:28 +0100 | xff0x | (~xff0x@2001:1a81:524f:ad00:23cf:423a:2190:173f) |
2022-02-12 17:20:18 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 17:20:36 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) |
2022-02-12 17:21:11 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-02-12 17:21:44 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 17:24:57 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Ping timeout: 240 seconds) |
2022-02-12 17:27:40 +0100 | leungbk | (~brian@cpe-142-129-149-172.socal.res.rr.com) (Ping timeout: 256 seconds) |
2022-02-12 17:29:30 +0100 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2022-02-12 17:30:15 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 17:31:04 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 17:32:25 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 17:33:50 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 17:35:48 +0100 | Koen | (~Koen@252.248.88.92.rev.sfr.net) (Quit: WeeChat 3.4) |
2022-02-12 17:37:35 +0100 | Guest|46 | (~Guest|46@116.182.218.87.dynamic.jazztel.es) |
2022-02-12 17:37:42 +0100 | Guest|46 | (~Guest|46@116.182.218.87.dynamic.jazztel.es) (Client Quit) |
2022-02-12 17:39:53 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 17:41:48 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 17:46:56 +0100 | wombat875 | (~wombat875@pool-72-89-24-154.nycmny.fios.verizon.net) (Ping timeout: 256 seconds) |
2022-02-12 17:47:17 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!) |
2022-02-12 17:48:15 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
2022-02-12 17:50:33 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) |
2022-02-12 17:50:34 +0100 | alp | (~alp@user/alp) |
2022-02-12 17:51:33 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 17:52:01 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 17:53:34 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!) |
2022-02-12 17:54:00 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 17:55:14 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
2022-02-12 17:58:04 +0100 | maxime_ | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) |
2022-02-12 18:00:31 +0100 | max22- | (~maxime@2a01cb08833598002f7f8e76f08da118.ipv6.abo.wanadoo.fr) (Ping timeout: 250 seconds) |
2022-02-12 18:00:33 +0100 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2022-02-12 18:12:14 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 18:16:58 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 18:21:59 +0100 | modnar | (~modnar@shell.sonic.net) |
2022-02-12 18:23:52 +0100 | mmhat | (~mmh@55d4ce4d.access.ecotel.net) (Quit: WeeChat 3.4) |
2022-02-12 18:24:30 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) |
2022-02-12 18:24:37 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 18:24:37 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 18:24:37 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 18:26:08 +0100 | DNH | (~DNH@2a02:8108:1100:16d8:95db:50d7:7eec:328d) |
2022-02-12 18:28:52 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds) |
2022-02-12 18:29:33 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2022-02-12 18:31:26 +0100 | mmhat | (~mmh@55d4ce4d.access.ecotel.net) |
2022-02-12 18:33:24 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 18:35:00 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 18:35:29 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 18:38:11 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 18:41:55 +0100 | kilolympus | (~kilolympu@31.205.200.235) (Ping timeout: 256 seconds) |
2022-02-12 18:46:16 +0100 | cheater | (~Username@user/cheater) |
2022-02-12 18:50:16 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) (Quit: Konversation terminated!) |
2022-02-12 18:51:58 +0100 | hgolden | (~hgolden2@cpe-172-114-81-123.socal.res.rr.com) |
2022-02-12 18:54:19 +0100 | motherfsck | (~motherfsc@user/motherfsck) (Quit: quit) |
2022-02-12 18:55:02 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 18:55:34 +0100 | econo | (uid147250@user/econo) |
2022-02-12 18:56:33 +0100 | burnsidesLlama | (~burnsides@dhcp168-017.wadham.ox.ac.uk) |
2022-02-12 18:58:29 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 18:59:05 +0100 | maxime__ | (~maxime@2a01cb0883359800facf81d49c6f1298.ipv6.abo.wanadoo.fr) |
2022-02-12 19:01:49 +0100 | maxime_ | (~maxime@lfbn-ren-1-1026-62.w92-139.abo.wanadoo.fr) (Ping timeout: 256 seconds) |
2022-02-12 19:02:18 +0100 | olle | (~olle@i5E866D81.versanet.de) |
2022-02-12 19:02:42 +0100 | little_mac | (~little_ma@2601:410:4300:3ce0:f502:3f20:a1e5:5bdc) |
2022-02-12 19:02:56 +0100 | <olle> | Provided you have a functional core that's kind of small and an imperative shell that's a bit too big, what are the available strategies to move code into the functional core? |
2022-02-12 19:02:58 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 19:03:08 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 19:03:08 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 19:03:08 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 19:03:21 +0100 | CiaoSen | (~Jura@p200300c95737a2002a3a4dfffe84dbd5.dip0.t-ipconnect.de) (Ping timeout: 250 seconds) |
2022-02-12 19:05:30 +0100 | <dminuoso> | That question is a bit too general |
2022-02-12 19:05:37 +0100 | <dminuoso> | But in princinple there's nothing wrong about imperative code |
2022-02-12 19:06:06 +0100 | <dminuoso> | GHC largely consists of very imperative code for example |
2022-02-12 19:07:38 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 272 seconds) |
2022-02-12 19:08:17 +0100 | <olle> | dminuoso: Problem with imperative code is it's hard to unit test and often requires a lot of mocking. |
2022-02-12 19:08:20 +0100 | <olle> | Or scaffolding. |
2022-02-12 19:08:47 +0100 | <olle> | Found one quote: "To get the most out of functional core we will tend to load everything beforehand and save everything afterwards, limiting the round-trips to the DB while risking loading data that is not used" |
2022-02-12 19:08:51 +0100 | <olle> | http://martinsson-johan.blogspot.com/2021/01/hexagonal-architecture-vs-functional.html |
2022-02-12 19:09:23 +0100 | <dminuoso> | olle: Functional code will not, necessarily, make things easier to test. |
2022-02-12 19:09:52 +0100 | <dminuoso> | It's mostly a question of general code design. |
2022-02-12 19:09:54 +0100 | <olle> | dminuoso: I think it will. :) |
2022-02-12 19:10:10 +0100 | <dminuoso> | Based on what data? |
2022-02-12 19:10:25 +0100 | <olle> | To be clear, I work professionally in PHP, so there's often a lot of mixing between side-effects and business logic. |
2022-02-12 19:10:40 +0100 | <dminuoso> | First, the word "functional" is really not well defined, so its not even clear to me what you mean by "functional" as opposed to imperative |
2022-02-12 19:10:42 +0100 | <olle> | dminuoso: Based on my experience in our legacy PHP code base. |
2022-02-12 19:10:43 +0100 | <dminuoso> | They are orthogonal dimensions |
2022-02-12 19:11:13 +0100 | <olle> | Yes, "funcaional" as loosely pure or referential transparent. Or even "possible to test without mocks". |
2022-02-12 19:11:36 +0100 | <dminuoso> | Well, if you define functional as "possible to test without mocks", then clearly functional is possible to test without mocks. |
2022-02-12 19:11:42 +0100 | <olle> | :) |
2022-02-12 19:11:50 +0100 | <dminuoso> | But that's really just a tautology |
2022-02-12 19:12:19 +0100 | <dminuoso> | olle: I still think they are orthogonal dimensions. |
2022-02-12 19:12:56 +0100 | <olle> | dminuoso: My point of view is really pragmatic. |
2022-02-12 19:13:07 +0100 | <olle> | In my experience, pure functions are easier to test. |
2022-02-12 19:13:12 +0100 | <dminuoso> | There's a good reason why there's several dozen different styles of testing, and that's not because certain programming approaches limit your testing abilities. |
2022-02-12 19:13:20 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 250 seconds) |
2022-02-12 19:13:28 +0100 | <dminuoso> | It's simply because different problem domains or software solutions require different appraoches |
2022-02-12 19:14:02 +0100 | <dminuoso> | Insisting you be able to have some percentage of unit testing coverage is just blindly asserting this is a useful thing to do |
2022-02-12 19:14:15 +0100 | <olle> | Sure |
2022-02-12 19:14:34 +0100 | <olle> | Or yes, I make the assumption that 50% test coverage is better than 0 :) |
2022-02-12 19:14:45 +0100 | <dminuoso> | Unit testing is something that pertains to code design, and is somewhat unrelated to matters like functional or purity |
2022-02-12 19:14:55 +0100 | <dminuoso> | If you can ship code as modular fragments, then unit testing becomes viable |
2022-02-12 19:15:04 +0100 | alx741 | (~alx741@181.199.42.143) |
2022-02-12 19:15:11 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 19:15:21 +0100 | <janus> | let's say you have a bunch of data, and a bunch of mutations. after the 6th mutation, there is an invariant that now is valid for the rest of the program. data structures usually come with invariants, so this is an opporunity to invent a name for this data structure |
2022-02-12 19:15:27 +0100 | <dminuoso> | The requirement to mock has less to do with functional, but usually by intricate dependencies on stateful behavior you cant control |
2022-02-12 19:15:53 +0100 | <janus> | but that doesn't seem specific to functional programming, that is just about inventing abstractions |
2022-02-12 19:16:26 +0100 | <dminuoso> | I feel pure functional code enables reasoning on the programmer level, and it certainly can in *some* situations enable things like quickcheck. |
2022-02-12 19:16:38 +0100 | <olle> | janus: Sure, each domain entity comes with validation and rules. |
2022-02-12 19:17:09 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 19:17:38 +0100 | <janus> | functional programming just means that the intermediate states are created by functions that return the new state instead of mutating it in-place, right? |
2022-02-12 19:17:45 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds) |
2022-02-12 19:17:45 +0100 | alx741 | (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
2022-02-12 19:17:58 +0100 | <dminuoso> | functional programming, again, has little to do with testing. |
2022-02-12 19:17:59 +0100 | <janus> | so one could argue that something can be both functional and imperative, like GHC that was mentioned previously |
2022-02-12 19:18:06 +0100 | <olle> | janus: Mutation is one side-effect, but there are others, like IO to file or db |
2022-02-12 19:18:33 +0100 | <dminuoso> | Lets assume one definition of functional programming, namely that our software programming principle revolves around HOFs for the most part |
2022-02-12 19:18:53 +0100 | <dminuoso> | HOFs dont make testing any less or more testable than say a class-based approach from Java. |
2022-02-12 19:19:05 +0100 | <dminuoso> | In Java you instantiate things, and test these objects. In Haskell you test functinos. |
2022-02-12 19:19:11 +0100 | <olle> | dminuoso: That's not a useful def for me, sorry. In "functional core, imperative shell", it's assume to seprate purity from IO-dense code. |
2022-02-12 19:19:16 +0100 | <dminuoso> | They are not any different if you blur the details |
2022-02-12 19:19:30 +0100 | <dminuoso> | olle: See, now that again has little to do with functional either. |
2022-02-12 19:19:39 +0100 | <dminuoso> | It's really about modular software design. |
2022-02-12 19:19:52 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 19:19:56 +0100 | <olle> | dminuoso: "Modular" can mean a lot of things. |
2022-02-12 19:20:08 +0100 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2022-02-12 19:20:28 +0100 | <Franciman> | is there any blog post or reference speaking about laziness advantages? |
2022-02-12 19:20:31 +0100 | <Franciman> | over strict evaluation |
2022-02-12 19:21:02 +0100 | <olle> | Franciman: OCaml vs Haskell ;D |
2022-02-12 19:21:17 +0100 | <dminuoso> | olle: Well, so unit testing is usually a matter of testing individual functions. |
2022-02-12 19:21:20 +0100 | <Franciman> | where can i find it, olle ? |
2022-02-12 19:21:32 +0100 | <dminuoso> | So if you write them modularly, you can usually test them without mocking anything. |
2022-02-12 19:21:33 +0100 | <Franciman> | https://markkarpov.com/post/haskell-vs-ocaml.html ? |
2022-02-12 19:21:33 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 19:21:39 +0100 | <olle> | Franciman: Google? I'm mostly joking, but I assume someone wrote about it... |
2022-02-12 19:21:39 +0100 | <dminuoso> | And you dont have to test everything either |
2022-02-12 19:21:47 +0100 | <dminuoso> | Say mocking a database is usually a silly thing to do |
2022-02-12 19:22:09 +0100 | <dminuoso> | But if you insist on dragging 10,000 lines of transitive code around on a database dependency, then that's simply non-modular code. |
2022-02-12 19:22:25 +0100 | <dminuoso> | It's some big ball of spaghetti where you didnt manage to split the business logic from the database interaction |
2022-02-12 19:22:54 +0100 | <monochrom> | "Why Functional Programming Matters" by John Hughes is actually "why laziness matters". There is a paper version and a video version. |
2022-02-12 19:23:00 +0100 | <dminuoso> | So to enable unit testing, you can instead have a bunch of particular business logic functions you test in unit tests |
2022-02-12 19:23:02 +0100 | <Franciman> | oh nice, thanks monochrom |
2022-02-12 19:23:41 +0100 | <dminuoso> | olle: Part of the problem may be that you're too focused on having complete coverage. But for unit tests its better to accept that you cant have that. |
2022-02-12 19:23:51 +0100 | <olle> | dminuoso: That's given, but my question was about strategies to achieve such a divide. |
2022-02-12 19:23:51 +0100 | <dminuoso> | So imagine what the core business logic is you want to test/assert. |
2022-02-12 19:24:02 +0100 | <dminuoso> | That has nothing to do with purity |
2022-02-12 19:24:15 +0100 | phma | (~phma@host-67-44-208-247.hnremote.net) (Read error: Connection reset by peer) |
2022-02-12 19:24:54 +0100 | <dminuoso> | If I have some `processAndDumpFile :: String -> IO ()`, I can simply run that in a test, and check the resulting file - turning it into `process :: String -> Dat` is certainly a bit more convenient for testing, but it's not fundamentally different |
2022-02-12 19:25:01 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) |
2022-02-12 19:25:11 +0100 | phma | (~phma@host-67-44-208-185.hnremote.net) |
2022-02-12 19:25:18 +0100 | <dminuoso> | it doesn't really have a meaningful difference to the way you test |
2022-02-12 19:25:27 +0100 | <olle> | dminuoso: Full picture: A test suite based on mostly integrity tests is slooow. |
2022-02-12 19:25:46 +0100 | jgeerds_ | (~jgeerds@55d4a547.access.ecotel.net) |
2022-02-12 19:26:18 +0100 | <dminuoso> | olle: integration tests are not the same thing, they're orthogonal to unit tests. in integration tests you're usually more concerns whether interfaces interact with each other correctly, where in unit tests you can test individual parts for their internal correctness. |
2022-02-12 19:26:23 +0100 | <dminuoso> | why not have both? |
2022-02-12 19:26:50 +0100 | <olle> | dminuoso: Of course you'll have both. But unit tests can be part in the dev feedback loop. Integrity tests can't (easily). |
2022-02-12 19:27:33 +0100 | dyeplexer | (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
2022-02-12 19:28:15 +0100 | <dminuoso> | Integration tests can be too, my point is just trading one for another is not a wise thing. |
2022-02-12 19:28:53 +0100 | Natch | (~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se) (Remote host closed the connection) |
2022-02-12 19:29:12 +0100 | <olle> | dminuoso: It really can't be, tho. Integrity tests in our product takes ~10 min to run, and it will increase. |
2022-02-12 19:29:15 +0100 | <dminuoso> | You dont do unit tests because "integration tests are less useful", you do unit tests to assert correctness of individual components. You do integration tests to assert correctness of interfaces and coupling between components. The latter helps finding a different class of bugs |
2022-02-12 19:29:50 +0100 | <dminuoso> | So its not a "should I do 1) or 2)". It's rather a question of "how many unit tests, integration tests and system tests do we want" |
2022-02-12 19:30:00 +0100 | <dminuoso> | And for what reason do you want any of these |
2022-02-12 19:30:22 +0100 | <olle> | dminuoso: To restate my original question, it's like "which strategies can we use to increase the ratio of fast unit tests?" |
2022-02-12 19:30:43 +0100 | vysn | (~vysn@user/vysn) |
2022-02-12 19:31:14 +0100 | <dminuoso> | olle: Keep a modular software design in mind *while* you write a component, with the explicit intent of unit testing it. |
2022-02-12 19:31:32 +0100 | <dminuoso> | If you just do a lot of adhoc writing, yes testing becomes ahrd. |
2022-02-12 19:32:59 +0100 | <dminuoso> | Our SDN compiler for example is constructed of a driver, multiple stages each consisting of phases. Its the drivers responsibility to execute stages, do a bit of housekeeping, and then feed artifacts into the next stage |
2022-02-12 19:33:04 +0100 | <dminuoso> | each stage has zero knowledge of the next |
2022-02-12 19:34:03 +0100 | <dminuoso> | that enables us to test stages in isolation as a kind of integration testing between the phases. then the phases have clear data boundaries, we have `N1 -> Comp N2`, `N2 -> Comp N3`, `N3 -> Comp N4` |
2022-02-12 19:34:08 +0100 | <olle> | dminuoso: Duh, a compiler is a pipeline arch, easy to make pure :) |
2022-02-12 19:34:24 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 19:34:25 +0100 | <dminuoso> | Sure so? |
2022-02-12 19:34:39 +0100 | <olle> | Other domains are not so lucky :d |
2022-02-12 19:34:46 +0100 | <dminuoso> | Take inspiration from that in code design. |
2022-02-12 19:34:48 +0100 | <olle> | But in fact, a web request could be a pipeline too |
2022-02-12 19:34:55 +0100 | <dminuoso> | Yes, that's the point Im trying to make! |
2022-02-12 19:35:10 +0100 | <dminuoso> | You could think of a web request of having these stages: |
2022-02-12 19:35:46 +0100 | <dminuoso> | Decode/route request > request data from database > process data > write data back to database > turn result into response > render response |
2022-02-12 19:36:00 +0100 | kilolympus | (~kilolympu@31.205.200.235) |
2022-02-12 19:36:06 +0100 | <dminuoso> | It might not work as a law, but depending on your problem domain, you might be able to fit 90% of that into that form |
2022-02-12 19:36:18 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 19:36:40 +0100 | <olle> | dminuoso: Yes, the problem is when side-effects depends on each other. "Check if file exists, if no, write one, if writing failed, return error" |
2022-02-12 19:37:10 +0100 | <olle> | dminuoso: One strategy to move all side-effects in one place is to use events. |
2022-02-12 19:37:19 +0100 | <olle> | Or a queue. |
2022-02-12 19:37:40 +0100 | <olle> | I think Free monad and/or tagless-final are other such in Haskell community...? |
2022-02-12 19:39:41 +0100 | <olle> | You want the functional core to "eat" the imperative shell during refactor, kind of :) Like an amoeba :D |
2022-02-12 19:42:17 +0100 | Natch | (~natch@c-4db8e255.014-297-73746f25.bbcust.telenor.se) |
2022-02-12 19:48:22 +0100 | MatthiasG2 | (~matthias@i6DFA0382.versanet.de) |
2022-02-12 19:51:36 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 256 seconds) |
2022-02-12 19:52:37 +0100 | alx741 | (~alx741@181.199.42.143) |
2022-02-12 19:55:07 +0100 | alx741 | (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
2022-02-12 19:56:27 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 19:56:56 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 19:58:36 +0100 | <olle> | I wonder if free monad can be replaced with a builder pattern in an OOP lang, like new IO.if(fn => DB.getUser).then(fn => save new username); |
2022-02-12 19:59:17 +0100 | jgeerds_ | (~jgeerds@55d4a547.access.ecotel.net) (Ping timeout: 256 seconds) |
2022-02-12 20:01:05 +0100 | o-90 | (~o-90@gateway/tor-sasl/o-90) |
2022-02-12 20:01:49 +0100 | maxime__ | (~maxime@2a01cb0883359800facf81d49c6f1298.ipv6.abo.wanadoo.fr) (Ping timeout: 240 seconds) |
2022-02-12 20:02:35 +0100 | <EvanR> | let me introduce you to jquery |
2022-02-12 20:03:30 +0100 | zer0bitz_ | (~zer0bitz@2001:2003:f74d:b800:78e9:2c9a:5431:d092) (Ping timeout: 260 seconds) |
2022-02-12 20:06:16 +0100 | <olle> | :D |
2022-02-12 20:06:31 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2022-02-12 20:07:17 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 240 seconds) |
2022-02-12 20:08:33 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2022-02-12 20:08:48 +0100 | <EvanR> | the previous discussion on atomic transactional I/O and "sending" into the internet: if you limit yourself to datagrams or raw IP, you can hypothetically arrange for a set of grams to be "all dispatched" or "cancel all that". But since the internet is technically unreliable, I'm not sure how nice that would be |
2022-02-12 20:09:16 +0100 | <EvanR> | ignoring local unreliability with the OS |
2022-02-12 20:09:33 +0100 | zer0bitz | (~zer0bitz@2001:2003:f74d:b800:78e9:2c9a:5431:d092) |
2022-02-12 20:09:42 +0100 | <geekosaur> | or not so technically, if you have my router :þ |
2022-02-12 20:09:44 +0100 | <olle> | EvanR: Hm, is that related to our discussion? Or something else? |
2022-02-12 20:09:56 +0100 | <olle> | No no, nevermind |
2022-02-12 20:10:03 +0100 | <EvanR> | cloud haskell's "guarantee" that "if tcp is reliable, so is cloud haskell" or such |
2022-02-12 20:11:57 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 20:14:18 +0100 | <EvanR> | olle, functional vs imperative is kind of missing a point, in haskell context you can have "pure code" (?) that looks imperative and so is just as easy to test |
2022-02-12 20:15:14 +0100 | <EvanR> | IO is harder to test, because of IO, and to some extent because of I/O |
2022-02-12 20:16:03 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 20:16:36 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Remote host closed the connection) |
2022-02-12 20:17:00 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) |
2022-02-12 20:17:12 +0100 | <EvanR> | IO became the main sewerage line of stuff they couldn't figure out how to do functionally so you can't even define it xD |
2022-02-12 20:17:39 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 20:17:56 +0100 | <EvanR> | if nice haskell are mineral crystals IO is chernobylite |
2022-02-12 20:19:22 +0100 | deadmarshal | (~deadmarsh@95.38.230.187) (Ping timeout: 256 seconds) |
2022-02-12 20:24:55 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 272 seconds) |
2022-02-12 20:25:21 +0100 | o-90 | (~o-90@gateway/tor-sasl/o-90) (Ping timeout: 276 seconds) |
2022-02-12 20:28:11 +0100 | <sm> | chernobylite eh.. I guess that's a no-good, very bad type of mineral |
2022-02-12 20:31:33 +0100 | Sadeq | (~Sadeq@151.235.4.11) |
2022-02-12 20:32:00 +0100 | Sadeq | (~Sadeq@151.235.4.11) (Client Quit) |
2022-02-12 20:32:13 +0100 | akegalj | (~akegalj@93-139-129-4.adsl.net.t-com.hr) |
2022-02-12 20:32:23 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 20:32:59 +0100 | c209e6dc-4d76-47 | (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) |
2022-02-12 20:33:33 +0100 | maxime__ | (~maxime@2a01cb08833598009e7cfeb2ba15b673.ipv6.abo.wanadoo.fr) |
2022-02-12 20:34:43 +0100 | alx741 | (~alx741@181.199.42.143) |
2022-02-12 20:35:22 +0100 | fef | (~thedawn@user/thedawn) (Remote host closed the connection) |
2022-02-12 20:36:11 +0100 | <olle> | EvanR: "Imperative shell" is better named "effectful shell" or such |
2022-02-12 20:36:58 +0100 | <olle> | I think that's the idea behind the pattern, at least. |
2022-02-12 20:37:13 +0100 | jao | (~jao@static-68-235-44-10.cust.tzulo.com) |
2022-02-12 20:37:57 +0100 | <olle> | Not if the code contains for-loops :) |
2022-02-12 20:39:03 +0100 | <olle> | It's complete shit that constructors in OOP always use the "new" keyword instead of FP convention of capital first letter. :d |
2022-02-12 20:39:14 +0100 | <olle> | How are you supposed to do a DSL with that? |
2022-02-12 20:39:15 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-02-12 20:39:25 +0100 | <olle> | new Add(new Int, new Int) |
2022-02-12 20:39:46 +0100 | <olle> | I wonder if any OOP lang got rid of that... |
2022-02-12 20:41:07 +0100 | koolazer | (~koo@user/koolazer) |
2022-02-12 20:42:02 +0100 | jao | (~jao@static-68-235-44-10.cust.tzulo.com) (Ping timeout: 256 seconds) |
2022-02-12 20:42:22 +0100 | alx741 | (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
2022-02-12 20:43:10 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 20:43:10 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 20:43:13 +0100 | jao | (~jao@68.235.43.172) |
2022-02-12 20:44:51 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) |
2022-02-12 20:45:20 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 20:53:57 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 20:55:05 +0100 | <monochrom> | OO constructors and ADT constructors are different. Even opposite. |
2022-02-12 20:55:44 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 20:56:40 +0100 | <olle> | Opposite? Pah! |
2022-02-12 20:57:53 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 20:59:03 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 21:00:43 +0100 | <EvanR> | data dual to codata |
2022-02-12 21:00:45 +0100 | cynomys | (~cynomys@user/cynomys) |
2022-02-12 21:02:18 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 21:02:18 +0100 | <olle> | They are used for similar use-cases. |
2022-02-12 21:02:31 +0100 | <olle> | Mostly because FP don't have objects, and OOP don't have ADT |
2022-02-12 21:02:47 +0100 | <geekosaur> | similar in some senses, different in others |
2022-02-12 21:03:55 +0100 | <monochrom> | Two solutions to the same problem are always used in similar (even same) use cases. That doesn't mean they are the same solution. |
2022-02-12 21:04:17 +0100 | <monochrom> | When I have the problem of boredom, I have two candidate solutions: AOE4, category theory. |
2022-02-12 21:04:32 +0100 | <monochrom> | So suddenly AOE4 and category theory are similar. "similar". |
2022-02-12 21:05:01 +0100 | vysn | (~vysn@user/vysn) (Ping timeout: 240 seconds) |
2022-02-12 21:05:03 +0100 | <monochrom> | Right? They are used for similar uses cases. When I want some fun. |
2022-02-12 21:05:03 +0100 | <maerwald> | they're both a waste of time? |
2022-02-12 21:05:08 +0100 | <maerwald> | ah |
2022-02-12 21:05:08 +0100 | <monochrom> | haha |
2022-02-12 21:05:16 +0100 | juhp | (~juhp@128.106.188.82) (Ping timeout: 256 seconds) |
2022-02-12 21:05:26 +0100 | <monochrom> | I don't object to "waste of time" really haha. |
2022-02-12 21:06:47 +0100 | <olle> | I don't really care |
2022-02-12 21:06:49 +0100 | <olle> | Do you? |
2022-02-12 21:06:54 +0100 | <monochrom> | I do. |
2022-02-12 21:06:56 +0100 | <olle> | :) |
2022-02-12 21:07:17 +0100 | <monochrom> | People keep thinking that Haskell classes and Java interfaces are "similar". It's the same deal. |
2022-02-12 21:07:30 +0100 | <monochrom> | They are opposite approaches to the same problem. |
2022-02-12 21:07:50 +0100 | <monochrom> | They both solve the problem beautifully. That still doesn't mean they are similar. |
2022-02-12 21:08:01 +0100 | juhp | (~juhp@128.106.188.82) |
2022-02-12 21:08:07 +0100 | <monochrom> | This is important in understand either notions properly. |
2022-02-12 21:08:27 +0100 | <monochrom> | But then again you can object to proper understanding in the first place. |
2022-02-12 21:10:27 +0100 | vglfr | (~vglfr@coupling.penchant.volia.net) (Read error: Connection reset by peer) |
2022-02-12 21:11:18 +0100 | vglfr | (~vglfr@coupling.penchant.volia.net) |
2022-02-12 21:12:12 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2022-02-12 21:15:13 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 21:17:07 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 21:19:03 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) |
2022-02-12 21:19:20 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 21:19:21 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-02-12 21:20:34 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2022-02-12 21:20:41 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 21:24:18 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-02-12 21:24:28 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 21:24:44 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) (Client Quit) |
2022-02-12 21:25:02 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-02-12 21:25:27 +0100 | <romesrf> | o/ |
2022-02-12 21:25:43 +0100 | Unicorn_Princess | (~Unicorn_P@46-54-248-191.static.kate-wing.si) |
2022-02-12 21:34:03 +0100 | coot | (~coot@213.134.190.95) (Quit: coot) |
2022-02-12 21:35:16 +0100 | <olle> | Aaaah, passing around a state container might be a strategy |
2022-02-12 21:35:25 +0100 | <olle> | Or, a container containing state shifting events to IO |
2022-02-12 21:39:49 +0100 | alp | (~alp@user/alp) (Ping timeout: 240 seconds) |
2022-02-12 21:39:55 +0100 | <ehammarstrom> | what's a commonly used cli arg parser package? |
2022-02-12 21:40:07 +0100 | <geekosaur> | optparse-applicative |
2022-02-12 21:42:17 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 21:42:41 +0100 | neurocyte0917090 | (~neurocyte@IP-094046067096.dynamic.medianet-world.de) |
2022-02-12 21:42:41 +0100 | neurocyte0917090 | (~neurocyte@IP-094046067096.dynamic.medianet-world.de) (Changing host) |
2022-02-12 21:42:41 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) |
2022-02-12 21:45:46 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 21:47:33 +0100 | <sm> | or cmdargs |
2022-02-12 21:47:46 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) (Read error: Connection reset by peer) |
2022-02-12 21:48:32 +0100 | neurocyte0917090 | (~neurocyte@IP-094046067096.dynamic.medianet-world.de) |
2022-02-12 21:48:32 +0100 | neurocyte0917090 | (~neurocyte@IP-094046067096.dynamic.medianet-world.de) (Changing host) |
2022-02-12 21:48:32 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) |
2022-02-12 21:49:21 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) |
2022-02-12 21:51:02 +0100 | `2jt | (~jtomas@130.red-88-22-46.staticip.rima-tde.net) (Ping timeout: 272 seconds) |
2022-02-12 21:51:29 +0100 | jao | (~jao@68.235.43.172) (Ping timeout: 256 seconds) |
2022-02-12 21:54:34 +0100 | <dminuoso> | merijn: Are you around? |
2022-02-12 21:57:29 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 21:57:30 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 21:57:30 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 21:57:55 +0100 | coot | (~coot@213.134.190.95) |
2022-02-12 21:58:07 +0100 | ravella | (~ravella@user/ryanavella) |
2022-02-12 22:01:12 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) (Read error: Connection reset by peer) |
2022-02-12 22:01:53 +0100 | romesrf | (~romes@44.190.189.46.rev.vodafone.pt) |
2022-02-12 22:02:19 +0100 | alx741 | (~alx741@181.199.42.143) |
2022-02-12 22:02:49 +0100 | raehik1 | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds) |
2022-02-12 22:03:39 +0100 | akegalj | (~akegalj@93-139-129-4.adsl.net.t-com.hr) (Quit: leaving) |
2022-02-12 22:03:41 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) (Ping timeout: 245 seconds) |
2022-02-12 22:06:06 +0100 | <maerwald> | there's also commander-cli |
2022-02-12 22:07:03 +0100 | alx741 | (~alx741@181.199.42.143) (Read error: Connection reset by peer) |
2022-02-12 22:10:15 +0100 | _ht | (~quassel@231-169-21-31.ftth.glasoperator.nl) (Remote host closed the connection) |
2022-02-12 22:12:20 +0100 | c209e6dc-4d76-47 | (~aditya@2601:249:4300:1296:195:dac6:592c:a55a) (Quit: Konversation terminated!) |
2022-02-12 22:13:06 +0100 | <sm> | interesting. Also docopt |
2022-02-12 22:13:59 +0100 | neurocyte0917090 | (~neurocyte@IP-094046067096.dynamic.medianet-world.de) |
2022-02-12 22:13:59 +0100 | neurocyte0917090 | (~neurocyte@IP-094046067096.dynamic.medianet-world.de) (Changing host) |
2022-02-12 22:13:59 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) |
2022-02-12 22:14:04 +0100 | <maerwald> | yeah, I actually find optparse-applicative the least intuitive, but always ends up with it, because it appears to be the most powerful one |
2022-02-12 22:20:59 +0100 | acidjnk | (~acidjnk@p200300d0c705755700771b768146bc05.dip0.t-ipconnect.de) |
2022-02-12 22:22:26 +0100 | merijn | (~merijn@c-001-001-027.client.esciencecenter.eduvpn.nl) (Ping timeout: 245 seconds) |
2022-02-12 22:23:29 +0100 | sagax | (~sagax_nb@user/sagax) (Quit: Konversation terminated!) |
2022-02-12 22:28:37 +0100 | jao | (~jao@static-68-235-44-70.cust.tzulo.com) |
2022-02-12 22:30:05 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Remote host closed the connection) |
2022-02-12 22:30:52 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2022-02-12 22:32:16 +0100 | jgeerds_ | (~jgeerds@55d4a547.access.ecotel.net) |
2022-02-12 22:34:26 +0100 | <sm> | I thought cmdargs was equivalent, but you could be right |
2022-02-12 22:34:39 +0100 | <sm> | one thing it can do is accept abbreviations of flags |
2022-02-12 22:34:46 +0100 | <sm> | which I'm fond of |
2022-02-12 22:35:25 +0100 | <sm> | and I definitely agree about non-intuitive o-a |
2022-02-12 22:36:30 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 256 seconds) |
2022-02-12 22:37:41 +0100 | <energizer> | when people talk about "effects", are they talking about control-flow manipulation like imperative languages' throw/yield/await statements, or about mutation, or about IO? or are those all somehow part of the same concept? |
2022-02-12 22:38:17 +0100 | <geekosaur> | or not even those: Reader is an effect |
2022-02-12 22:38:32 +0100 | <energizer> | ok well then i have no idea what effect means :) |
2022-02-12 22:38:57 +0100 | <energizer> | i'm asking from the naive perspective (not being clever) |
2022-02-12 22:41:16 +0100 | <energizer> | what should i read? |
2022-02-12 22:41:39 +0100 | <dminuoso> | energizer: The word "effect" is something I think most Haskellers versed in the subject chose in a abstract way, it's very handwaving. |
2022-02-12 22:41:49 +0100 | <dminuoso> | And it doesn't make sense to someone who hasn't reached a certain level of enlightenment |
2022-02-12 22:42:18 +0100 | <sm> | it's a fine word, exact meaning depends on context as usual |
2022-02-12 22:42:26 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) |
2022-02-12 22:42:26 +0100 | wroathe | (~wroathe@206-55-188-8.fttp.usinternet.com) (Changing host) |
2022-02-12 22:42:27 +0100 | wroathe | (~wroathe@user/wroathe) |
2022-02-12 22:42:27 +0100 | <energizer> | i gave some examples, are those all effects? |
2022-02-12 22:42:48 +0100 | <EvanR> | anything that's not purely functional |
2022-02-12 22:43:10 +0100 | <geekosaur> | hm? I think few peopke would exclude State as an effect |
2022-02-12 22:43:29 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2022-02-12 22:43:30 +0100 | <EvanR> | at risk of raising more questions, purely functional programming is just using pure functions xD |
2022-02-12 22:43:45 +0100 | <dminuoso> | energizer: So one view I adopt is to think of `(>>=) :: Monad m => m a -> (a -> m b) -> m b` as annotating `effect` results with further `effects`. And the reason I chose "effect" is because I get to "add" to it. |
2022-02-12 22:44:14 +0100 | <dminuoso> | By "add" I mean the function of type `a -> m b` is under my control - I give it some type of "flavor", "extra context".. some kind of "effect" |
2022-02-12 22:44:24 +0100 | <dminuoso> | That's opposed to say: |
2022-02-12 22:45:13 +0100 | <dminuoso> | `extend :: Comonad w => (w a -> b) -> w a -> w b`, where `w` losely represents context/neighborhood Im given. I can sort of "inspect" the context/neighborhood that is being given to me |
2022-02-12 22:45:14 +0100 | <EvanR> | a pure function is one which has no side effects more more relevant here is context independent. Unlike State |
2022-02-12 22:45:17 +0100 | <dminuoso> | they are very suggestive terms |
2022-02-12 22:45:29 +0100 | <dminuoso> | It doesn't mean anything concrete in particular |
2022-02-12 22:45:42 +0100 | <geekosaur> | EvanR, State is pure functional. it just *looks* like it isn't |
2022-02-12 22:45:48 +0100 | <geekosaur> | @unmtl State s a |
2022-02-12 22:45:48 +0100 | <lambdabot> | s -> (a, s) |
2022-02-12 22:46:06 +0100 | <[exa]> | "looks like impure" <- I can vote for this definition of effect |
2022-02-12 22:46:26 +0100 | <dminuoso> | [exa]: What's the Identity effect? Reader effect? |
2022-02-12 22:46:34 +0100 | <dminuoso> | neither looks impure at all |
2022-02-12 22:46:46 +0100 | <[exa]> | identity is "no effect" so I'm okay there |
2022-02-12 22:46:53 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 22:46:58 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 250 seconds) |
2022-02-12 22:47:09 +0100 | <[exa]> | but reader magically grabs global values out of nowhere! :D |
2022-02-12 22:47:10 +0100 | <EvanR> | "looks like" can be extended to everything, a computer is really an identifiable subset of a universal physical state |
2022-02-12 22:47:22 +0100 | <EvanR> | but it looks like a discrete machine |
2022-02-12 22:47:33 +0100 | <dminuoso> | [exa]: And what about Const? |
2022-02-12 22:48:32 +0100 | <EvanR> | the difference between s -> (a,s) and State s a is basically the key difference |
2022-02-12 22:49:19 +0100 | neurocyte0917090 | (~neurocyte@user/neurocyte) (Ping timeout: 272 seconds) |
2022-02-12 22:49:19 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 272 seconds) |
2022-02-12 22:50:28 +0100 | <[exa]> | dminuoso: same except the other way, it's collecting some monoid aside instead of doing computations |
2022-02-12 22:50:59 +0100 | <olle> | energizer: malloc can be considered an effect too :) |
2022-02-12 22:51:08 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 22:51:36 +0100 | <dminuoso> | Monad Complex |
2022-02-12 22:51:44 +0100 | <dminuoso> | Huh wow, did not know this instance existed. |
2022-02-12 22:51:56 +0100 | <dminuoso> | a :+ b >>= f = realPart (f a) :+ imagPart (f b) |
2022-02-12 22:52:24 +0100 | <energizer> | this is helping, thanks |
2022-02-12 22:52:36 +0100 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 250 seconds) |
2022-02-12 22:52:55 +0100 | <dminuoso> | [exa]: So what effect is being encoded here? :P |
2022-02-12 22:54:00 +0100 | <[exa]> | I'm trying to see if it looks like an effect |
2022-02-12 22:54:28 +0100 | <[exa]> | (currently by looking at it in disbelief :D ) |
2022-02-12 22:55:29 +0100 | <dminuoso> | Perhaps the important thing is that "effect" is not some ultimate truth, it's just a mental model - and like all models it has its limits. |
2022-02-12 22:55:43 +0100 | <dminuoso> | Trying to force an effect-interpretation here is not really helpful at all |
2022-02-12 22:55:55 +0100 | <olle> | energizer: Effect is anything that's not part of the relation between input and output |
2022-02-12 22:56:03 +0100 | <olle> | of a function |
2022-02-12 22:56:10 +0100 | <dminuoso> | The only absolute truth we have is the laws of Monad, anything else is just fuzzy human interpretation |
2022-02-12 22:56:24 +0100 | <[exa]> | dminuoso: that's basically I like the feels-like definition |
2022-02-12 22:56:28 +0100 | <Profpatsch> | Duplicate instance declarations: |
2022-02-12 22:56:30 +0100 | <Profpatsch> | instance FormatQuote a => PyF.PyFToString a |
2022-02-12 22:56:32 +0100 | <monochrom> | I leave the definitions of "effect" and "algorithm" social rather than mathematical. |
2022-02-12 22:56:32 +0100 | <Profpatsch> | instance [overlappable] [safe] Show t => PyF.PyFToString t |
2022-02-12 22:56:35 +0100 | <Profpatsch> | I want to define the first instance |
2022-02-12 22:56:44 +0100 | <Profpatsch> | Is there a way to make GHC accept it? |
2022-02-12 22:56:47 +0100 | <olle> | Note that being pure is not the same thing as referential transparency |
2022-02-12 22:57:07 +0100 | <dminuoso> | Profpatsch: The sane way is to use a newtype wrapper |
2022-02-12 22:57:12 +0100 | <olle> | A fib function can cache its result on file, silent on failure |
2022-02-12 22:57:22 +0100 | [exa] | imagines ComplexT |
2022-02-12 22:57:39 +0100 | <olle> | It'd be referential transparent - always same output on same input - but not pure - file IO. |
2022-02-12 22:57:39 +0100 | <Profpatsch> | dminuoso: I have a feeling deriving via would come in handy here |
2022-02-12 22:57:54 +0100 | <dminuoso> | Profpatsch: I dont think that will help you. |
2022-02-12 22:58:05 +0100 | <Profpatsch> | dminuoso: basically I want to say “whenever your type implements this typeclass I can also give you an implementation for this other typeclass |
2022-02-12 22:58:28 +0100 | <monochrom> | [exa]: Did you know that "data Pair a = P a a" is very much like Bool->a? :) |
2022-02-12 22:58:57 +0100 | <[exa]> | monochrom: yes that's even isomorphic in that encoding (was it scott encoding?) |
2022-02-12 22:59:00 +0100 | <monochrom> | All the way down to how their return's and >>='s correspond. |
2022-02-12 22:59:38 +0100 | <monochrom> | No I think that's just "Pair is a representable functor, represented by Bool". |
2022-02-12 22:59:46 +0100 | <dminuoso> | Profpatsch: The problem is, according to GHC, `instance Show t => PyF.PyFToString t` already matches *all* instances. |
2022-02-12 22:59:53 +0100 | <dminuoso> | Irrespective of whether a Show instance exists, even |
2022-02-12 22:59:54 +0100 | <monochrom> | So now "data Complex a = a :+ a" is just Pair in infix syntax. |
2022-02-12 22:59:59 +0100 | <[exa]> | I'm probably getting too carried away by the algebra semantic of complex numbers, yes. |
2022-02-12 23:00:19 +0100 | <dminuoso> | Profpatsch: That is, for instance selection that will *always* match. |
2022-02-12 23:00:22 +0100 | analognoise | (~analognoi@185.229.59.36) |
2022-02-12 23:00:45 +0100 | <dminuoso> | You could use {-# OVERLAPPING #-} in your instance, but you might want to weight the consequences of that. |
2022-02-12 23:00:49 +0100 | <[exa]> | anyway thanks guys this is a nice find. :] |
2022-02-12 23:01:24 +0100 | analognoise | (~analognoi@185.229.59.36) (Max SendQ exceeded) |
2022-02-12 23:01:43 +0100 | <Profpatsch> | dminuoso: yeah, that’s what I was expecting |
2022-02-12 23:01:53 +0100 | analognoise | (~analognoi@185.229.59.36) |
2022-02-12 23:02:24 +0100 | <dminuoso> | Ah but hold on, I think that wont work |
2022-02-12 23:02:30 +0100 | <dminuoso> | Because your instance is not any more specific. |
2022-02-12 23:02:42 +0100 | <dminuoso> | So you're out of luck. Either use a separate typeclass or a newtype wrapper |
2022-02-12 23:03:03 +0100 | <dminuoso> | (overlapping wouldnt do anything extra, since the other instance already is overlappable) |
2022-02-12 23:03:32 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2022-02-12 23:04:21 +0100 | eldritch_ | (~eldritch@user/eldritch/x-9272577) (Quit: bye) |
2022-02-12 23:04:21 +0100 | glider | (~glider@user/glider) (Quit: ZNC - https://znc.in) |
2022-02-12 23:04:22 +0100 | anderson | (~ande@user/anderson) (Quit: bye) |
2022-02-12 23:05:43 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 23:06:10 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 23:07:21 +0100 | pavonia | (~user@user/siracusa) |
2022-02-12 23:07:37 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 23:10:23 +0100 | Erutuon | (~Erutuon@user/erutuon) |
2022-02-12 23:10:44 +0100 | eldritch_ | (~eldritch@user/eldritch/x-9272577) |
2022-02-12 23:11:31 +0100 | <energizer> | do "algebraic effects" and "effect system" refer to the same thing? |
2022-02-12 23:12:23 +0100 | glider | (~glider@user/glider) |
2022-02-12 23:12:24 +0100 | <olle> | energizer: No |
2022-02-12 23:12:35 +0100 | <olle> | Assuming "effect system" is the same as "typed effects" |
2022-02-12 23:12:53 +0100 | <olle> | OCaml will have algebraic effects but not typed effects, iirc (in the next release) |
2022-02-12 23:13:57 +0100 | <energizer> | what is the difference? |
2022-02-12 23:15:36 +0100 | ProfSimm | (~ProfSimm@87.227.196.109) (Remote host closed the connection) |
2022-02-12 23:15:51 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 23:16:15 +0100 | unyu | (~pyon@user/pyon) (Quit: WeeChat 3.4) |
2022-02-12 23:16:26 +0100 | <olle> | energizer: typed effects mean that all side-effects of a function will be part of the function's signature, in some way |
2022-02-12 23:16:32 +0100 | <olle> | That's kind of already the case in Haskell |
2022-02-12 23:16:40 +0100 | anderson | (~ande@user/anderson) |
2022-02-12 23:16:58 +0100 | <olle> | energizer: https://www.janestreet.com/tech-talks/effective-programming/ |
2022-02-12 23:17:06 +0100 | <olle> | There's a talk on algebraic effects. |
2022-02-12 23:17:15 +0100 | <olle> | Wait no |
2022-02-12 23:17:55 +0100 | <olle> | energizer: This one: https://github.com/ocamllabs/ocaml-effects-tutorial |
2022-02-12 23:18:55 +0100 | <olle> | Not sure how that's different from `yield` in PHP and JS, honestly. |
2022-02-12 23:19:19 +0100 | <energizer> | "They generalise common abstractions such as exceptions, generators, asynchronous I/O, or concurrency, as well as other seemingly esoteric programming abstractions such as transactional memory and probabilistic computations." |
2022-02-12 23:20:09 +0100 | <energizer> | sure. python's `yield from` and `await` are really the same thing and i can see exceptions being related too |
2022-02-12 23:20:20 +0100 | unyu | (~pyon@user/pyon) |
2022-02-12 23:20:45 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:20:58 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:21:06 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:21:18 +0100 | <olle> | energizer: For a working lang with typed effects, see Koka 2 from Microsoft research |
2022-02-12 23:21:21 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:21:28 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:21:34 +0100 | <olle> | And maybe F* (fstar lang) |
2022-02-12 23:21:42 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:21:47 +0100 | <energizer> | the stuff we were talking about earlier, was that 'typed effects'? |
2022-02-12 23:21:49 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:22:04 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:22:11 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:22:25 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:22:32 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:22:36 +0100 | <olle> | energizer: functional core? |
2022-02-12 23:22:47 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:22:49 +0100 | <energizer> | no i was asking what 'effects' means |
2022-02-12 23:22:54 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:23:00 +0100 | <olle> | Ah, no, that's not the same |
2022-02-12 23:23:08 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:23:15 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:23:18 +0100 | <olle> | A function can be pure or effectful without affecting its function signature (in a language without typed effects) |
2022-02-12 23:23:30 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:23:37 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:23:50 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:23:58 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:24:13 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:24:19 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:24:34 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:24:41 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:24:55 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:25:02 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:25:17 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:25:24 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:25:38 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:25:45 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:26:00 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:26:07 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:26:12 +0100 | <olle> | I think in Haskell, side-effects will always change the signature, including the IO monad and others |
2022-02-12 23:26:21 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:26:22 +0100 | <olle> | Since the lang is pure :) |
2022-02-12 23:26:28 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:26:37 +0100 | <olle> | Even randomisation? |
2022-02-12 23:26:43 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:26:50 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:27:04 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:27:11 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:27:13 +0100 | <energizer> | effects, typed effects, algebraic effects, effect handlers, none of these mean the same thing |
2022-02-12 23:27:26 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:27:33 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:27:35 +0100 | <geekosaur> | olle, has little to do with purity and everything to do with strong typing |
2022-02-12 23:27:47 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:27:55 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:28:02 +0100 | <energizer> | , right? |
2022-02-12 23:28:09 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:28:10 +0100 | <olle> | geekosaur: Hm, no? Strong/weak types is not related to effects, I think. |
2022-02-12 23:28:16 +0100 | zebrag | (~chris@user/zebrag) |
2022-02-12 23:28:16 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:28:24 +0100 | <geekosaur> | hold on |
2022-02-12 23:28:26 +0100 | ChanServ | +o geekosaur |
2022-02-12 23:28:31 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:28:38 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:28:52 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:28:59 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:29:00 +0100 | geekosaur | +b *!*@98.38.249.169$##fix-your-connection |
2022-02-12 23:29:26 +0100 | <geekosaur> | pity I can't make my client do that automagically |
2022-02-12 23:29:28 +0100 | geekosaur | -o geekosaur |
2022-02-12 23:29:50 +0100 | <geekosaur> | olle, not directly, but if a language is strongly typed then effects will show in the type |
2022-02-12 23:29:59 +0100 | <geekosaur> | if it is weakly typed then they won't |
2022-02-12 23:30:24 +0100 | <geekosaur> | *how* they show depends on implementation |
2022-02-12 23:30:37 +0100 | <olle> | geekosaur: Not sure everyone would agree on that def :) |
2022-02-12 23:30:55 +0100 | <olle> | OCaml folks would call OCaml strongly typed, e.g. |
2022-02-12 23:32:12 +0100 | <geekosaur> | but it is also not directly purity. it is a combination: you must advertise impurity in the type in Haskell. you don't in OCaml |
2022-02-12 23:32:25 +0100 | alx741 | (~alx741@157.100.197.240) |
2022-02-12 23:32:40 +0100 | <geekosaur> | but you can advertise purity even in C |
2022-02-12 23:32:52 +0100 | <geekosaur> | soit's not just purity |
2022-02-12 23:33:45 +0100 | <olle> | wat |
2022-02-12 23:33:52 +0100 | <olle> | what does that mean, purity in C? |
2022-02-12 23:36:11 +0100 | <geekosaur> | no side effects. gcc/clang use it for optimization |
2022-02-12 23:36:18 +0100 | <olle> | geekosaur: Link? |
2022-02-12 23:36:35 +0100 | <geekosaur> | but it's up to you to use it and I think the ocmpiler just trusts you |
2022-02-12 23:37:14 +0100 | <olle> | Yeah, that's not "strong" typing in any sense xD |
2022-02-12 23:37:30 +0100 | <geekosaur> | here's an example https://stackoverflow.com/questions/29117836/attribute-const-vs-attribute-pure-in-gnu-c |
2022-02-12 23:37:34 +0100 | <olle> | But C was always weak + static |
2022-02-12 23:38:05 +0100 | <olle> | Yeah, just a compiler attribute |
2022-02-12 23:39:23 +0100 | <geekosaur> | right, but it does point up that purity by itself doesn't prove anything |
2022-02-12 23:39:35 +0100 | <geekosaur> | you need both for at least haskell-style effects |
2022-02-12 23:40:08 +0100 | <geekosaur> | and C is not strongly typed, so yes, it's an attribute instead of a type |
2022-02-12 23:40:36 +0100 | <olle> | Considering how esoteric typed effects are, I'd be suprised to see it in a weakly typed lang :) |
2022-02-12 23:41:40 +0100 | <geekosaur> | whereas in ocaml you cna't easily tell the difference between an "effect" and normal code except by inspecting the function in question |
2022-02-12 23:41:59 +0100 | alx741 | (~alx741@157.100.197.240) (Read error: Connection reset by peer) |
2022-02-12 23:42:18 +0100 | michalz | (~michalz@185.246.204.65) (Remote host closed the connection) |
2022-02-12 23:42:42 +0100 | <olle> | Sure |
2022-02-12 23:42:54 +0100 | <olle> | Same goes for all langs except Haskell :) |
2022-02-12 23:44:08 +0100 | ChanServ | +o litharge |
2022-02-12 23:44:09 +0100 | litharge | -bo *!*@98.38.249.169$##fix-your-connection litharge |
2022-02-12 23:44:20 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:44:27 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:44:41 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:44:49 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:45:04 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:45:11 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:45:19 +0100 | ChanServ | +o monochrom |
2022-02-12 23:45:24 +0100 | lavaman | (~lavaman@98.38.249.169) |
2022-02-12 23:45:30 +0100 | monochrom | +b *!*@98.38.249.169$##fix-your-connection |
2022-02-12 23:45:32 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2022-02-12 23:45:38 +0100 | <sprout> | how pure is a state monad? |
2022-02-12 23:45:52 +0100 | <geekosaur> | it's just s -> (a,s) |
2022-02-12 23:46:00 +0100 | monochrom | -o monochrom |
2022-02-12 23:46:12 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) (Ping timeout: 256 seconds) |
2022-02-12 23:46:23 +0100 | <sprout> | sure, but now I've got assignment in a pure language |
2022-02-12 23:46:31 +0100 | <geekosaur> | no impurity to it at all, it just hides that it's passing the "state" in and getting it back afterward |
2022-02-12 23:46:59 +0100 | <sprout> | and c hides it's pure underneath? |
2022-02-12 23:47:24 +0100 | <olle> | C just flashes all its dirty effects |
2022-02-12 23:47:36 +0100 | <olle> | Like a hobo on crystal meth |
2022-02-12 23:47:52 +0100 | <sprout> | a true programming perverts language! |
2022-02-12 23:48:13 +0100 | mon_aaraj | (~MonAaraj@user/mon-aaraj/x-4416475) |
2022-02-12 23:48:35 +0100 | bontaq | (~user@ool-45779fe5.dyn.optonline.net) |
2022-02-12 23:50:41 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2022-02-12 23:51:01 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:ad86:5044:3d0e:26e7) (Remote host closed the connection) |
2022-02-12 23:55:23 +0100 | <hpc> | in fact, C likes spreading its dirty effects even to clean parts of the code |
2022-02-12 23:55:30 +0100 | alp | (~alp@user/alp) |
2022-02-12 23:55:45 +0100 | <hpc> | if you write a potentially integer-overflowing addition in one function, gcc might decide to completely ignore an unrelated if-then-else in another function |
2022-02-12 23:56:03 +0100 | <hpc> | hope you have good logging, and also hope that your logging hasn't been gcc'd away as well |
2022-02-12 23:56:16 +0100 | <romesrf> | haahah olle |
2022-02-12 23:56:51 +0100 | <geekosaur> | "gcc'd away" |
2022-02-12 23:57:46 +0100 | <olle> | geekosaur: The nerdy sequal to "Gone with the wind" :D |
2022-02-12 23:57:58 +0100 | <hpc> | gone with the win32 |
2022-02-12 23:58:04 +0100 | <olle> | ^^ +1 |