Logs on 2021-10-31 (liberachat/#haskell)
| 00:00:13 | → | xsperry joins (~xs@user/xsperry) |
| 00:00:25 | → | hendursaga joins (~weechat@user/hendursaga) |
| 00:02:04 | <hololeap> | what does it mean when `cabal info` has parenthesis around an available version? |
| 00:02:24 | <hololeap> | hnix ... Versions available: ... 0.14.0.1, 0.14.0.2, (0.15.0) |
| 00:02:38 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 260 seconds) |
| 00:03:13 | → | son0p joins (~ff@181.136.122.143) |
| 00:04:10 | <geekosaur> | marked as deprecated, according to the hackage page |
| 00:04:29 | <hololeap> | why would the latest version be marked as deprecated? |
| 00:05:31 | <hololeap> | I'm not seeing anything about this being deprecated or being a candidate: https://hackage.haskell.org/package/hnix-0.15.0 |
| 00:05:45 | <geekosaur> | unclear. but I note that hackage's annotations conflate "deprecated" and "one version not preferred" |
| 00:05:53 | <geekosaur> | https://hackage.haskell.org/package/hnix/preferred |
| 00:06:41 | <hololeap> | hm, ok |
| 00:09:18 | <geekosaur> | so what it may actually mean is not so mucheprecated" as "don't rely on this yet", but because of the way hackage conflates those it reports it as deprecated |
| 00:10:01 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 00:12:24 | → | epolanski joins (uid312403@id-312403.helmsley.irccloud.com) |
| 00:13:02 | → | lavaman joins (~lavaman@98.38.249.169) |
| 00:14:24 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 00:18:50 | × | Lord_of_Life quits (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
| 00:20:41 | → | Lord_of_Life joins (~Lord@user/lord-of-life/x-2819915) |
| 00:25:00 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Remote host closed the connection) |
| 00:29:12 | → | guniberas joins (~guniberas@42.191.188.121) |
| 00:29:46 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 00:30:31 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 00:32:07 | × | Skyfire quits (~pyon@user/pyon) (Quit: brb) |
| 00:32:35 | → | Skyfire joins (~pyon@user/pyon) |
| 00:38:10 | × | haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
| 00:38:42 | × | Null_A quits (~null_a@2601:645:8700:2290:19ff:7d99:67c6:79e3) (Remote host closed the connection) |
| 00:41:05 | → | lavaman joins (~lavaman@98.38.249.169) |
| 00:42:11 | × | yaroot quits (~yaroot@6.3.30.125.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat) |
| 00:42:57 | → | yaroot joins (~yaroot@6.3.30.125.dy.iij4u.or.jp) |
| 00:45:42 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 00:46:39 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 00:46:39 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 00:46:39 | → | wroathe joins (~wroathe@user/wroathe) |
| 00:50:43 | × | neightchan quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9) |
| 00:50:56 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds) |
| 00:56:07 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 00:56:48 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 00:57:11 | → | lavaman joins (~lavaman@98.38.249.169) |
| 00:58:47 | → | allbery_b joins (~geekosaur@xmonad/geekosaur) |
| 00:58:47 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
| 00:58:50 | allbery_b | is now known as geekosaur |
| 01:02:05 | <hololeap> | good grief... how does a package pushed to hackage fail to build just with `cabal repl`? |
| 01:02:41 | <geekosaur> | cabal repl is dumb? (actually ghci is dumb) |
| 01:03:17 | × | catman quits (~catman@user/catman) (Quit: WeeChat 3.4-dev) |
| 01:03:27 | <geekosaur> | cabal repl tries to load everything at once, which ghci often mishandles |
| 01:04:04 | <geekosaur> | iirc it's even worse if it has e.g. test or benchmark executables because you end up with conflicting Main modules |
| 01:04:05 | <hololeap> | no, it's not that |
| 01:04:56 | <hololeap> | they use HM.toList when HashMap is clearly imported qualified as M |
| 01:05:02 | <hololeap> | little mistakes like that |
| 01:05:08 | <geekosaur> | oy |
| 01:07:25 | → | cads joins (~cads@ip-64-72-99-234.lasvegas.net) |
| 01:08:15 | × | iqubic quits (~user@2601:602:9502:c70:367a:1ecd:9a9a:53e8) (Remote host closed the connection) |
| 01:13:26 | <hololeap> | yay, HLS to the rescue |
| 01:13:56 | <hololeap> | helped me find which module to import for a undefined type |
| 01:14:48 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 01:15:17 | <aegon> | hackage doesn't try to build as part of the ingest process? |
| 01:15:46 | <geekosaur> | it does build but it does so after accepting the package |
| 01:15:58 | <geekosaur> | you can see build reports on the hackage page |
| 01:16:15 | <geekosaur> | and a summary as to whether it built or not |
| 01:17:10 | <geekosaur> | hm, also I'm not sure it tries to build if you upload docs |
| 01:17:22 | <geekosaur> | since it builds as part of generating them |
| 01:17:32 | <hololeap> | it says it's building fine, but y'all can try it for yourselves: https://hackage.haskell.org/package/hnix-0.14.0.2 |
| 01:17:54 | <hololeap> | src/Nix/Utils.hs:163:11: error: Not in scope: ‘HM.toList’ ... |
| 01:20:49 | <hololeap> | I had to patch it to get it to build: http://sprunge.us/dUG4WY |
| 01:21:08 | → | ec_ joins (~ec@gateway/tor-sasl/ec) |
| 01:21:51 | × | trillp quits (~trillp@69.233.98.238) (Quit: nyaa~) |
| 01:22:15 | × | finstern1s quits (~X@23.226.237.192) (Quit: leaving) |
| 01:24:23 | → | finsternis joins (~X@23.226.237.192) |
| 01:24:48 | → | trillp joins (~trillp@69.233.98.238) |
| 01:25:23 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 01:29:41 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 245 seconds) |
| 01:33:30 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 01:33:57 | <remexre> | how do people pronounce (>>) aloud? |
| 01:34:12 | <hololeap> | "and then" ? |
| 01:35:12 | <hololeap> | that's how I would do it... |
| 01:35:19 | <remexre> | eh, that's how rust pronounces bind... |
| 01:35:23 | <remexre> | ig it works |
| 01:35:52 | <hololeap> | print "this" >> print "that" -- print "this" and then print "that" |
| 01:36:06 | hololeap | shrugs |
| 01:37:44 | <hololeap> | you can also pronounce it as (shifty eyes) |
| 01:38:36 | → | natechan joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 01:39:04 | <cads> | hololeap, lol you could call ">>" the "sus" operator |
| 01:43:06 | <hololeap> | indeed >> |
| 01:44:30 | × | natechan quits (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9) |
| 01:45:02 | ec_ | is now known as ec |
| 01:49:22 | <aegon> | is there a way to hide an instance of a class within a module? |
| 01:49:43 | <aegon> | i have a datatype that needs to be an instance of something like Aeson, but its always an error for a user to call toJson directly |
| 01:50:01 | <aegon> | er, user of the library |
| 01:50:25 | <aegon> | so i'd like to make it a private instance of that class and expose a different function that will do the toJson with some added meta info |
| 01:50:48 | <geekosaur> | no, instances are global |
| 01:50:48 | <aegon> | oh, i guess i could manually instance it and do the right thing :| |
| 01:51:01 | <aegon> | deriving is so nice though |
| 01:51:24 | <aegon> | kk, i need to make the instance do the right thing then |
| 01:54:11 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 01:55:55 | → | lavaman joins (~lavaman@98.38.249.169) |
| 01:57:17 | <hololeap> | aegon: you could make a hidden newtype wrapping your datatype and derive ToJSON/FromJSON, then leverage that using your public datatype |
| 02:01:07 | <aegon> | hololeap: oooh, thats perfect |
| 02:03:56 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Remote host closed the connection) |
| 02:07:19 | <cads> | Hey all, I am working with the code listing here: https://gist.github.com/maxsu/62e8aeeb6acff3835240c6bc5a7a9651 |
| 02:08:02 | <cads> | there are a few places where the code is really repetitive and noisy, and I wonder if I can clean that up |
| 02:10:11 | <cads> | for example, we define categories with two constructors, like Category ob_c, hom_c. But that makes the Bifunctor constructor very noisy: like Bifunctor ob_c hom_c ob_d hom_d ob_e hom_e f |
| 02:10:25 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 02:10:25 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 02:10:25 | → | wroathe joins (~wroathe@user/wroathe) |
| 02:13:43 | <cads> | can I create an alternative constructor for Category that would let me write: |
| 02:14:05 | <cads> | class (Category C, Category D, Category E) => Bifunctor C D E f where bimap:: (C.ob x, C.ob x', C.ob y, C.ob y') => C.hom x x' -> D.hom y -> y' -> E.hom (f x y) -> (f x' y') |
| 02:14:28 | → | euouae joins (~euouae@user/euouae) |
| 02:14:30 | <euouae> | Hello |
| 02:14:33 | <hololeap> | isn't a category a Profunctor? |
| 02:15:57 | <cads> | hololeap, how do you figure? |
| 02:16:31 | <hololeap> | it's contravariant in `a` and covariant in `b` |
| 02:16:55 | <euouae> | I think profunctors are special kinds of categories |
| 02:17:05 | <hololeap> | other way around |
| 02:17:20 | <hololeap> | categories are profunctors that associate under composition |
| 02:17:34 | <euouae> | in that case, it goes both ways hololeap |
| 02:17:51 | <euouae> | e.g. https://en.wikipedia.org/wiki/Profunctor#Profunctors_as_categories explains how to view profunctors as categories |
| 02:18:34 | <euouae> | My question is, is it possible to write Haskell code that is /secure/ and transpiles to C? Now, what secure means, I don't know for sure. One example feature would be the zeroization fo memory after use |
| 02:19:39 | <euouae> | e.g. it would be nice to prove through the type system that the password leaves domain A and gets into domain B only for its use, and it is then deleted |
| 02:20:21 | <hololeap> | that sounds like something that could be done with linear types, perhaps? |
| 02:20:55 | <cads> | euouae, I hear that L4.Verified project did something like this by transpiling haskell to a special subset of C that lets us prove things are correct, but I forgot the details on how they ensured the compiler wouldn't introduce errors in the machine code |
| 02:21:46 | <hololeap> | it honestly sounds like something rust would do better |
| 02:21:56 | <hololeap> | haskell has that pesky garbage collector |
| 02:22:00 | <cads> | bit of a throwback, but might be a useful lead: http://code.ouroborus.net/fp-syd/past/2011/2011-05-sewell-l4v.pdf |
| 02:22:44 | <euouae> | Hmm I don't know if Rust can guarantee this hololeap, but I don't know much Rust either |
| 02:23:11 | <euouae> | I also don't know what linare types are |
| 02:23:58 | <euouae> | aah you're speaking of argument consumption |
| 02:24:57 | <hololeap> | > prove through the type system that the X leaves domain A and gets into domain B only for its use, and it is then deleted |
| 02:25:08 | <hololeap> | that sounds like exactly what linear types do |
| 02:25:27 | <euouae> | Yeah you're right, I agree it is a good solution |
| 02:26:11 | × | alx741 quits (~alx741@181.196.69.253) (Quit: alx741) |
| 02:27:16 | × | betelgeuse quits (~betelgeus@94-225-47-8.access.telenet.be) (Quit: The Lounge - https://thelounge.chat) |
| 02:28:17 | <cads> | I feel like these formal verification approaches have been around since the 70s but they're more or less unsustainable for most teams or individual programmers |
| 02:30:48 | <cads> | even now, after 50 years of development of specification and process algebras, linear logic, temporal logic, and so on. The machinery is there, but the effort to make, for example, a verified microkernel, is so stupendously difficult and technical that volunteers simply do not appear |
| 02:31:13 | <euouae> | cads, what of something a bit simpler, like a TLS library? |
| 02:32:08 | <euouae> | I'm looking at the slides you posted but I can't tell what's going on. There's three components, a Haskell reference implementation, the verification by Isabelle/HOL and a C implementation. I think the C implementation is hand-written using the Haskell as prototype? If I'm reading it correctly. |
| 02:33:35 | <euouae> | although that doesn't sound right. I'm not sure. |
| 02:34:13 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 02:35:35 | → | img joins (~img@user/img) |
| 02:38:37 | <euouae> | I also know of Ivory https://ivorylang.org/ but it's only a subset of C |
| 02:39:04 | <euouae> | cads so for example I think it's reasonable to use ivory to write certain algorithms in it |
| 02:41:47 | → | catman joins (~catman@user/catman) |
| 02:42:19 | <euouae> | Another great feature in Haskell that helps with security that C doesn't have is `hedgehog` or similar unit test libraries |
| 02:43:15 | <euouae> | I'm just trying to understand if there's people who are interested/working in writing safe C programs utilizing Haskell, and to learn more about techniques involving that... |
| 02:43:48 | <cads> | euouae, they started with an abstract specification wrote an haskell implementation. From that they auto-extracted an executable specification. They were able to then do a proof that the haskell derived spec implements the abstract spec |
| 02:44:40 | <cads> | they then manually wrote a C implementation and manually proved that it conforms to the exectutable spec |
| 02:44:51 | <euouae> | I'm not sure about that manual proof cads |
| 02:44:54 | <euouae> | I don't understand how that worked |
| 02:45:18 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 02:47:11 | <cads> | trying to find a paper with more details. If I recall correctly, there is a special subset of C and a HOL library that lets you prove things - like "there are no buffer overflows" about just that special subset of C |
| 02:47:54 | <euouae> | OK got it. There must have been some proof by argument too, I don't think it was all automated |
| 02:48:05 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 264 seconds) |
| 02:48:48 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 02:49:39 | <sm> | euouae: C has fuzz testing tools |
| 02:49:52 | <cads> | euouae, yeah, there are two kinds of proof involved, and they are both manual. First, we prove that the executable specification is really a refinement of the abstract spec. This proves our haskell implementation is legit, but is manual. |
| 02:50:32 | <cads> | euouae, second, we prove that each piece of C-code correctly implements its executable specification |
| 02:50:35 | <euouae> | That first part makes sense cads, I'm following. The abstract spec is something like Z-language |
| 02:50:39 | <cads> | two huge acts of HOL proof bashing |
| 02:51:28 | <euouae> | OK got you. Even /that/ sounds great to me for my purpose. How about secure Haskell then? |
| 02:51:37 | <cads> | euouae, the only part that we get "for free" is the haskell derived executable spec. And then we havbe to prove that the spec really does "carry" the abstract spec, yeah, like with Z-lang refinement or other spec langauges |
| 02:51:44 | <euouae> | Of course Haskell is generally secure, but for instance, a dangling password variable in memory is insecure. That's an example |
| 02:51:57 | <euouae> | cads, you were involved? |
| 02:52:07 | <cads> | nah, I'm just a fanboi |
| 02:52:35 | × | hendursaga quits (~weechat@user/hendursaga) (Quit: hendursaga) |
| 02:52:36 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 245 seconds) |
| 02:52:41 | <cads> | also, I'm frustrated that the technique isn't more popular even though it's a decade old - my theory is just that the technique is incredibly technical |
| 02:53:05 | → | hendursaga joins (~weechat@user/hendursaga) |
| 02:53:11 | × | xff0x quits (~xff0x@2001:1a81:52f0:9300:c38e:4fda:aa4c:3e21) (Ping timeout: 264 seconds) |
| 02:54:07 | <cads> | euouae, for your needs, maybe all you need is the the ability to draft up a very clean spec, write up some less clean haskell, and then prove that the haskel is to spec... |
| 02:54:19 | → | proboscis joins (~proboscis@115-189-81-94.mobile.spark.co.nz) |
| 02:54:45 | → | xff0x joins (~xff0x@2001:1a81:5344:9700:7f1d:617d:8156:7d35) |
| 02:55:27 | <cads> | and we do that by auto-translating haskell to a messy "exec-spec", and formally linking that back to the abstract spec |
| 02:56:01 | <euouae> | so you're saying the executable spec can be ran and produces an "ok" or "no-good" as an answer? because as the project evolves and people contribute, a divergence may occur |
| 02:56:22 | <euouae> | it would be nice if it were caught automatically instead of someone noticing "oops, 100 commits ago the specs diverged" |
| 02:56:47 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds) |
| 02:57:22 | <cads> | I suppose the way that would work is that every change to the exec-spec must also come with a proof showing that the change still conforms to the abstract-spec |
| 02:59:09 | <euouae> | It's annoying that I feel like getting sucked in some sort of black hole |
| 03:00:07 | <cads> | yeah, all you want is verifiable code, but now you have to reason about an abstract spec, an implementation, an executable spec, and a proof showing that the executable spec conforms to the abstract spec |
| 03:00:16 | <euouae> | I started by wanting to add a feature to my IRC client, but then I had to modify the elisp TLS implementation, but the C functions were undocumented so I delved into the C lib, and the source code seemed bad so I started dreaming about writing a secure implementation of it |
| 03:01:17 | <euouae> | cads oh yeah, that's also a black hole :P |
| 03:02:04 | → | lavaman joins (~lavaman@98.38.249.169) |
| 03:02:26 | × | trillp quits (~trillp@69.233.98.238) (Quit: nyaa~) |
| 03:03:38 | × | neurocyte0132889 quits (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds) |
| 03:05:29 | <cads> | " the executable spec can be ran and produces an "ok" or "no-good" as an answer?" That is close, in that we do run /something/ that tells us go/no go |
| 03:05:51 | <cads> | we have 4 artefacts: AbstractSpec (a manually written HOL statement), Implementation (manually written Haskell code), ExecSpec (an automatically written Hol statement), and ExecSpecConformsToAbstractSpec (a manually written Hol proof) |
| 03:07:10 | <cads> | If we update Implementation, that updates ExecSpec. We can then attempt to run ExecSpecConformsToAbstractSpec. If it fails, then our code is out of spec, and we either need to fix our code or update ExecSpecConformsToAbstractSpec to prove the the new feature is still to spec |
| 03:07:32 | <euouae> | OK actually that sounds good enough to me cads |
| 03:08:39 | <euouae> | hmm I don't know anything about HOLs |
| 03:09:14 | <cads> | I would love to see a continuous integration pipeline where you're simply not allowed to push to Implementation unless your PR also passes the ExecSpecConformsToAbstractSpec |
| 03:11:46 | <aegon> | man, Debug.Trace is fantastic for pretending you don't need tests :P |
| 03:13:47 | <cads> | if you invented something that could turn your manual debugging sessions into reasonable unit tests, I feel like building a statue in your honor would be the least we could do |
| 03:15:06 | × | td_ quits (~td@muedsl-82-207-238-113.citykom.de) (Ping timeout: 245 seconds) |
| 03:17:47 | <aegon> | i wish. I'm suffering from sunk cost fallacies right now. Tested the library to spec, but then for a prototype client for integration i was like, nahhhhh. thats like a one time thing to work out the kinks in. got half way through and paused for the night... |
| 03:17:53 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 03:17:58 | <aegon> | now i'm not sure whats a bug or whats odd stuff i put in there to try to find bugs :\ |
| 03:18:19 | <aegon> | and its already mostly manually tested, so why go back to unit test it now right? :D |
| 03:19:07 | <aegon> | thats an awesome idea though, if there were a tool to watch some manual integration tests and point at what functions are prolly worth unit-testing it'd save so much time in so many place |
| 03:19:11 | <aegon> | *places |
| 03:20:27 | <aegon> | you'd need some sort of valgrind like setup watching the bits |
| 03:21:10 | <aegon> | actually, does valgrind not already have the ability to point at funcitons used etc? |
| 03:21:13 | aegon | runs to the docs |
| 03:21:17 | → | lavaman joins (~lavaman@98.38.249.169) |
| 03:22:02 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 03:24:38 | <cads> | something that watches and summarizes your debug sessions could be nice. If you have a debug sessions that you want to implement as unit tests, you haven't lost your precious work. |
| 03:24:44 | <cads> | I even bet it is now possible to train a transformer to watch you manually test a piece of code, and "guess" an equivalent unit or integration test |
| 03:26:51 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 03:29:07 | → | emf joins (~emf@2620:10d:c090:400::5:9927) |
| 03:30:19 | × | emf quits (~emf@2620:10d:c090:400::5:9927) (Client Quit) |
| 03:32:36 | <aegon> | yeah it looks like valgrand has enough tracking stuff to mess with the idea thats really neat, i wish there was more emphasis in code land on tools like flay / flog and metrics like those |
| 03:33:37 | <aegon> | cads: what do you mean by a transformer in that context? |
| 03:36:32 | <cads> | aegon, transformers are a kind of neural network that appeared in 2017. They are getting really good at taking a sequence of complex data - like a waveform in spoken english - and translating it directly into another complex sequence - like a waveform translated to spoken french. |
| 03:36:43 | → | justsomeguy joins (~justsomeg@user/justsomeguy) |
| 03:37:24 | <euouae> | cads how? |
| 03:37:45 | <euouae> | do they do something insane like look at the waveform in a basis and decide what the new coefficients are? |
| 03:38:12 | <cads> | aegon, and recently transformer models have been used to do code tasks. For example, you give it it text describing how to zip two lists together, and it gives you a python implementation of Zip |
| 03:38:17 | <aegon> | cads: interesting, yeah i've worked with em a little in doing some automatic music transcription |
| 03:38:22 | × | viluon quits (uid453725@id-453725.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 03:38:45 | <aegon> | i've never thought of using them on byte code or anthing or heard of them goign into code implementations |
| 03:38:56 | <aegon> | is that how githubs copilot stuff is working? |
| 03:39:45 | <aegon> | i'm lost on the jump from that type of stuff to looking at a binary run in memory and extracting symbol info but it sounds really interesting |
| 03:40:53 | <cads> | Copilot is powered by OpenAI's Codex, which is a code-trained version of the openAI GPT3 language transformer |
| 03:41:38 | <cads> | aegon, I haven't run into anything that really explain "how" we can take a complex signal and just zap it into another complex signal - especially something so complex as spoken speech |
| 03:41:51 | <cads> | let alone something as complex as code |
| 03:42:51 | <cads> | aegon, a fun thing is that it's not very good. A study showed that in security-sensitive coding tasks, Codex introduced buffer overflows and other security holes 40% of the time |
| 03:43:53 | <cads> | the reason why is hypothesized to be the training corpus - the engine was trained on the github corpus, which has a lot of low quality code and security bugs. |
| 03:45:31 | <cads> | aegon, so far, the best I can do is show you a colorful graph of neural network components put together in a novel way, wave my hands, slap the hood, and say "this baby is able to internally learn a latent representation covering the complexities of the underlying domain" |
| 03:45:46 | [_] | is now known as [itchyjunk] |
| 03:46:57 | <cads> | Hey all, is there any writing about how to clean up messy typeclasses? |
| 03:47:11 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 264 seconds) |
| 03:47:11 | <cads> | this looks like an example: http://h2.jaguarpaw.co.uk/posts/simplifying-typeclasses/ |
| 03:48:59 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 03:50:04 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 03:55:38 | → | lavaman joins (~lavaman@98.38.249.169) |
| 04:06:24 | <aegon> | cads: aye thats really interesting though, never thoguht about using a net on an in memory representation fo something and trying to parse out a good sytactic version. If you haven't already you should check out hasktorch |
| 04:10:56 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 04:15:54 | → | natechan joins (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
| 04:18:18 | × | euouae quits (~euouae@user/euouae) (Quit: thank you for the help) |
| 04:22:36 | × | boxscape_ quits (~boxscape_@i577BCB53.versanet.de) (Ping timeout: 245 seconds) |
| 04:23:22 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 04:26:08 | → | mbuf joins (~Shakthi@171.61.246.251) |
| 04:29:29 | → | mikoto-chan joins (~mikoto-ch@185.237.102.118) |
| 04:30:41 | <dsal> | if I have a `forall m. MonadIO m => m T` is there a way to get to the `m` type from within the body without a proxy? @m tells me it's not in scope. |
| 04:32:57 | → | yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
| 04:37:51 | × | zebrag quits (~chris@user/zebrag) (Remote host closed the connection) |
| 04:38:01 | → | Guest19 joins (~Guest19@2600:1700:31c0:3a10:81e2:cfe0:2015:d55b) |
| 04:41:11 | × | yrlnry quits (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 264 seconds) |
| 04:42:10 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 04:43:20 | <monochrom> | ScopedTypeVariables |
| 04:45:19 | <dsal> | Oh weird. I thought that was on and/or implied. heh |
| 04:45:40 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 04:47:03 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 04:47:03 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 04:47:03 | → | wroathe joins (~wroathe@user/wroathe) |
| 04:48:13 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 04:50:02 | → | mvk joins (~mvk@2607:fea8:5cc1:300::d3fb) |
| 04:53:00 | × | Skyfire quits (~pyon@user/pyon) (Quit: brb broken config) |
| 04:53:21 | → | Skyfire joins (~pyon@user/pyon) |
| 04:57:08 | × | ghoulguy quits (x@libera/staff/glguy) (Quit: Quit) |
| 04:58:17 | → | glguy joins (x@libera/staff/glguy) |
| 04:58:43 | glguy | is now known as ghoulguy |
| 05:01:02 | × | Guest19 quits (~Guest19@2600:1700:31c0:3a10:81e2:cfe0:2015:d55b) (Quit: Client closed) |
| 05:11:48 | <cads> | aegon, I haven't used it, but I might try to port a pytorch project for fun soon |
| 05:34:04 | × | manicennui quits (uid349235@id-349235.tinside.irccloud.com) (Quit: Keep firing, assholes!) |
| 05:45:24 | → | boxscape_ joins (~boxscape_@mue-88-130-59-084.dsl.tropolys.de) |
| 05:48:51 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
| 05:50:28 | <brainfreeze> | Why do instance declarations always seem to be missing a type variable? It almost seems like it's currying the type variables. |
| 05:51:06 | <c_wraith> | type constructors are curried, yes |
| 05:51:22 | <c_wraith> | and instances have to have the right kind |
| 05:51:35 | <c_wraith> | If that means not fully applying type arguments, so be it |
| 05:56:06 | × | ec quits (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
| 05:57:44 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 05:59:30 | → | haritz joins (~hrtz@62.3.70.206) |
| 05:59:30 | × | haritz quits (~hrtz@62.3.70.206) (Changing host) |
| 05:59:30 | → | haritz joins (~hrtz@user/haritz) |
| 06:02:11 | × | epolanski quits (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
| 06:03:45 | → | mei joins (~mei@user/mei) |
| 06:05:17 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 06:06:22 | <brainfreeze> | Is there a formal name for what I mentioned? |
| 06:09:15 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 06:10:07 | → | img joins (~img@user/img) |
| 06:11:12 | × | haritz quits (~hrtz@user/haritz) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
| 06:14:22 | → | haritz joins (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) |
| 06:14:22 | × | haritz quits (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host) |
| 06:14:22 | → | haritz joins (~hrtz@user/haritz) |
| 06:23:51 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 245 seconds) |
| 06:24:37 | × | slowButPresent quits (~slowButPr@user/slowbutpresent) (Quit: leaving) |
| 06:26:48 | × | vicfred quits (~vicfred@user/vicfred) (Quit: Leaving) |
| 06:31:54 | → | fvr joins (uid503686@id-503686.uxbridge.irccloud.com) |
| 06:38:57 | × | proboscis quits (~proboscis@115-189-81-94.mobile.spark.co.nz) (Read error: Connection reset by peer) |
| 06:40:04 | → | proboscis joins (~proboscis@115-189-81-94.mobile.spark.co.nz) |
| 06:40:45 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 06:40:45 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 06:40:45 | → | wroathe joins (~wroathe@user/wroathe) |
| 06:45:50 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 06:50:59 | → | max22- joins (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
| 06:53:40 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Remote host closed the connection) |
| 06:54:38 | × | bitmapper quits (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
| 06:56:52 | → | chomwitt joins (~chomwitt@ppp-2-85-245-90.home.otenet.gr) |
| 06:57:44 | × | ikke quits (~kevin@alpine/developer/ikke) (Quit: WeeChat 3.2) |
| 06:57:59 | → | ikke joins (~kevin@alpine/developer/ikke) |
| 07:01:45 | × | aegon quits (~mike@174.127.249.180) (Quit: leaving) |
| 07:08:02 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 07:11:40 | → | img_ joins (~img@user/img) |
| 07:11:40 | × | MQ-17J quits (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
| 07:14:47 | × | img quits (~img@user/img) (Ping timeout: 264 seconds) |
| 07:16:32 | × | fizzsegfaultbuzz quits (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 265 seconds) |
| 07:16:51 | → | MQ-17J joins (~MQ-17J@8.6.144.203) |
| 07:20:47 | × | mvk quits (~mvk@2607:fea8:5cc1:300::d3fb) (Ping timeout: 264 seconds) |
| 07:21:33 | × | brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection) |
| 07:23:05 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 07:24:26 | → | chexum joins (~quassel@gateway/tor-sasl/chexum) |
| 07:24:30 | × | chexum_ quits (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 276 seconds) |
| 07:29:04 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 07:30:15 | → | Gurkenglas joins (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
| 07:30:16 | × | tzh quits (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
| 07:46:34 | × | img_ quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 07:54:02 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 07:55:27 | → | takuan joins (~takuan@178-116-218-225.access.telenet.be) |
| 07:56:52 | × | chomwitt quits (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Read error: Connection reset by peer) |
| 07:57:03 | → | img joins (~img@user/img) |
| 07:57:07 | → | chomwitt joins (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) |
| 07:58:35 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 264 seconds) |
| 08:05:27 | → | hendursa1 joins (~weechat@user/hendursaga) |
| 08:08:01 | → | aliosablack joins (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) |
| 08:08:29 | × | chomwitt quits (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Read error: Connection reset by peer) |
| 08:09:19 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 08:09:21 | × | hendursaga quits (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
| 08:13:15 | × | notzmv quits (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
| 08:17:03 | → | zincy_ joins (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
| 08:22:04 | → | acidjnk_new3 joins (~acidjnk@p200300d0c7441135e59462474fdf3062.dip0.t-ipconnect.de) |
| 08:22:48 | <Franciman> | tik tok tik tok, the time is running out. be prepared |
| 08:26:14 | → | Farzad joins (~FarzadBek@178.131.30.143) |
| 08:32:02 | → | fendor joins (~fendor@178.115.79.50.wireless.dyn.drei.com) |
| 08:39:40 | × | mikoto-chan quits (~mikoto-ch@185.237.102.118) (Read error: Connection reset by peer) |
| 08:40:36 | × | Sgeo quits (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
| 08:41:12 | × | azimut quits (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
| 08:43:22 | → | azimut joins (~azimut@gateway/tor-sasl/azimut) |
| 08:43:51 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 08:44:11 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 08:45:31 | × | boxscape_ quits (~boxscape_@mue-88-130-59-084.dsl.tropolys.de) (Ping timeout: 245 seconds) |
| 08:50:40 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Read error: Connection reset by peer) |
| 08:51:57 | × | zincy_ quits (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
| 08:56:10 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 08:58:14 | → | c0c0 joins (~coco@85.195.206.193) |
| 08:58:40 | × | c0c0 quits (~coco@85.195.206.193) (Client Quit) |
| 08:58:49 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 08:59:11 | × | guniberas quits (~guniberas@42.191.188.121) (Ping timeout: 264 seconds) |
| 09:00:06 | × | tsmc[m] quits (~tsmcmatri@2001:470:69fc:105::1:7e1) (Quit: You have been kicked for being idle) |
| 09:00:08 | × | sam[m]12 quits (~sammtopoi@2001:470:69fc:105::e887) (Quit: You have been kicked for being idle) |
| 09:03:34 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds) |
| 09:05:16 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 09:05:31 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 09:07:57 | <[exa]> | Franciman: what's the deal? |
| 09:14:56 | × | acidjnk_new3 quits (~acidjnk@p200300d0c7441135e59462474fdf3062.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
| 09:15:34 | <cads> | Is halloween, am feeling spooky. https://gist.github.com/maxsu/65ee89f6306fe2e62c5e8e519b635399 Happy halloween! |
| 09:20:46 | → | acidjnk joins (~acidjnk@p200300d0c7441135e0a3c48788e32464.dip0.t-ipconnect.de) |
| 09:20:55 | <Rembane_> | Very spooky! |
| 09:21:04 | → | kenran joins (~kenran@200116b82b0d0a00e98487ecbf918c70.dip.versatel-1u1.de) |
| 09:21:40 | <cads> | I'm trying to get at least some of the ghosts out of it, lol |
| 09:23:26 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 245 seconds) |
| 09:29:45 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 09:39:38 | × | img quits (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
| 09:41:00 | → | img joins (~img@user/img) |
| 09:45:13 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 09:46:29 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 09:50:11 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 264 seconds) |
| 09:51:06 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 09:53:27 | → | Tuplanolla joins (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
| 09:55:55 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 09:57:47 | × | zaquest quits (~notzaques@5.128.210.178) (Remote host closed the connection) |
| 09:57:52 | × | aliosablack quits (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 260 seconds) |
| 09:58:50 | → | zaquest joins (~notzaques@5.128.210.178) |
| 10:00:23 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 265 seconds) |
| 10:05:26 | <maerwald> | Haskell is mentioned wrt "significant whitespace" in the "Worst Programming Language Ever" talk: https://www.youtube.com/watch?v=2mnYf7L7Amw |
| 10:14:47 | × | img quits (~img@user/img) (Ping timeout: 264 seconds) |
| 10:14:48 | <Rembane_> | Can't Haskell be written without significant whitespace? |
| 10:15:22 | → | mmhat joins (~mmh@55d4be88.access.ecotel.net) |
| 10:16:10 | <maerwald> | the point is that changing whitespaces to tabs can make your program not compile |
| 10:16:25 | <maerwald> | or not following alignment rules in general |
| 10:17:21 | Vq | (half-jokingly) regards bad indentation in C worse than behavioural bugs |
| 10:17:45 | <Rembane_> | maerwald: Got it. I'm too used to Python and Haskell to see this as a problem. |
| 10:18:02 | <Cale> | Replacing whitespace with vertical tabs also can make your program not compile in many languages, but nobody cares |
| 10:18:18 | <Rembane_> | What's a vertical tab and how is it rendered? |
| 10:18:21 | <Rembane_> | I've never seen one. |
| 10:18:55 | <Cale> | It's an ancient character that was used to speed up vertical movement on printers |
| 10:19:01 | <maerwald> | :D |
| 10:19:08 | <Cale> | But it's still there as a form of whitespace |
| 10:19:34 | <maerwald> | the only time I printed out my code was to troll a professor |
| 10:19:44 | <Vq> | I don't see page-feed characters that often anymore, I wonder what languages accepts them... |
| 10:21:08 | <Rembane_> | Cale: Cool, doesn't sound too useful on a monitor but I can see why it was useful back in the day. |
| 10:21:18 | <maerwald> | and when you don't match the whitespaces in python, the error you get is "couldn't match colon" |
| 10:21:37 | <Rembane_> | I am not going to make an inappropriate joke about that. |
| 10:21:38 | <maerwald> | but I guess it would be kinda hard for the compiler figuring out what you meant |
| 10:22:18 | <maerwald> | it could try brute-force compilation |
| 10:22:52 | <Rembane_> | maerwald: Try all possible indentations and see what kinda makes sense? |
| 10:23:16 | <maerwald> | "compiles" |
| 10:23:21 | <maerwald> | "makes sense" is something else |
| 10:24:20 | <Cale> | Tab also isn't too useful on a monitor, but people still seem to care about interpreting tab characters for some reason. I would just ban them altogether. |
| 10:24:29 | → | notzmv joins (~zmv@user/notzmv) |
| 10:25:04 | <Rembane_> | maerwald: That's my point, it would be very easy to get "interesting" semantics from that. :) |
| 10:25:14 | <Rembane_> | I like to have the tab key but not the tab character. |
| 10:29:22 | × | kenran quits (~kenran@200116b82b0d0a00e98487ecbf918c70.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
| 10:29:38 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 10:30:19 | → | kenran joins (~kenran@200116b82b0d0a0094e57a89e1053ea4.dip.versatel-1u1.de) |
| 10:33:37 | × | kenran quits (~kenran@200116b82b0d0a0094e57a89e1053ea4.dip.versatel-1u1.de) (Client Quit) |
| 10:35:29 | <maerwald> | it's a great talk... he put all his sincere hatred and made something funny out of it |
| 10:35:44 | <maerwald> | and I can feel there's years of pain behind it |
| 10:37:00 | <maerwald> | the only conditional operator being `unless` is a great idea |
| 10:38:51 | <maerwald> | I must admit I can't stand that function in haskell either (especially when hlint suggests it to me) |
| 10:39:44 | <maerwald> | just because in my head `when (not ...)` sounds much more plausible |
| 10:39:50 | × | mmhat quits (~mmh@55d4be88.access.ecotel.net) (Quit: WeeChat 3.3) |
| 10:42:54 | ← | f-a parts (f2a@f2a.jujube.ircnow.org) () |
| 10:45:54 | → | mmhat joins (~mmh@55d4be88.access.ecotel.net) |
| 10:49:26 | × | xff0x quits (~xff0x@2001:1a81:5344:9700:7f1d:617d:8156:7d35) (Ping timeout: 260 seconds) |
| 10:49:55 | → | xff0x joins (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) |
| 10:54:23 | × | mmhat quits (~mmh@55d4be88.access.ecotel.net) (Quit: WeeChat 3.3) |
| 10:55:15 | → | mmhat joins (~mmh@55d4be88.access.ecotel.net) |
| 11:00:53 | → | alx741 joins (~alx741@181.196.69.253) |
| 11:07:51 | → | Guest31 joins (~Guest31@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
| 11:09:02 | → | chomwitt joins (~chomwitt@ppp-2-85-245-90.home.otenet.gr) |
| 11:14:29 | → | Midjak joins (~Midjak@82-65-111-221.subs.proxad.net) |
| 11:16:20 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 11:21:23 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 264 seconds) |
| 11:23:45 | → | DNH joins (~DNH@8.43.122.53) |
| 11:26:44 | → | __monty__ joins (~toonn@user/toonn) |
| 11:37:31 | → | Lycurgus joins (~juan@98.4.112.204) |
| 11:40:13 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 11:41:56 | <tomjaguarpaw> | With OverloadedRecordDot in 9.2, if I want to write record.field then the field for my record must be in scope, at the very least in qualified form. Is that expected? Seems strange to me. |
| 11:42:51 | <tomjaguarpaw> | e.g. if I have module Foo where data Foo = Foo { field :: Int } and module Main where import (Foo(Foo)); main = print (Foo 1).field then it will not work. |
| 11:43:01 | <tomjaguarpaw> | I have to add at least import qualified Foo(field) |
| 11:43:10 | ← | jakalx parts (~jakalx@base.jakalx.net) (Error from remote client) |
| 11:43:32 | <tomjaguarpaw> | Why does it care that field is in scope? Doesn't the HasField instance do all that is required? |
| 11:50:31 | × | hippoid quits (~idris@184.105.6.88) (Ping timeout: 245 seconds) |
| 11:51:28 | → | hippoid joins (~idris@184.105.6.88) |
| 11:54:39 | → | Liudvikas joins (~Liudvikas@88.222.185.135) |
| 11:54:56 | <zincy> | davean: If you want to do timeouts with Machines can you use Wye machine which has one input that just just yields a Timeout action to the Wye? |
| 11:54:58 | → | jakalx joins (~jakalx@base.jakalx.net) |
| 11:55:14 | × | acidjnk quits (~acidjnk@p200300d0c7441135e0a3c48788e32464.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
| 11:57:13 | × | Farzad quits (~FarzadBek@178.131.30.143) (Quit: Leaving) |
| 12:00:35 | × | cheater quits (~Username@user/cheater) (Ping timeout: 246 seconds) |
| 12:01:11 | → | cheater joins (~Username@user/cheater) |
| 12:03:46 | <amesgen[m]> | tomjaguarpaw: HasField is compiler-solved, and the behavior you are seeing is exactly the reason why, as it would be impossible to "hide" fields otherwise. |
| 12:05:17 | <amesgen[m]> | See https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0023-overloaded-record-fields.rst#solving-hasfield-constraints |
| 12:06:17 | <tomjaguarpaw> | amesgen[m]: Thanks |
| 12:07:49 | × | xsperry quits (~xs@user/xsperry) () |
| 12:11:49 | × | Lycurgus quits (~juan@98.4.112.204) (Quit: Exeunt) |
| 12:12:26 | <zincy> | Does using a tuple make sense over a fixed list when you know ahead of time exactly what you need? |
| 12:13:17 | <zincy> | For a card game there are different stages say 1,2,3,4,5 and we have (Card,Card,Card) and then the next stages just mean an N+1 tuple |
| 12:13:17 | <geekosaur> | it can. but if you need list operations, you lose those with a tuple |
| 12:13:40 | <zincy> | Convert to list? Maybe this is slow hmm |
| 12:13:58 | <geekosaur> | in particular with that case you would need to manually build the N+1-tuple |
| 12:14:10 | <geekosaur> | which means it won't generalize well for different Ns |
| 12:14:46 | <zincy> | Yeah generalisation wont be needed most probably |
| 12:21:54 | × | Liudvikas quits (~Liudvikas@88.222.185.135) (Ping timeout: 260 seconds) |
| 12:23:13 | → | slowButPresent joins (~slowButPr@user/slowbutpresent) |
| 12:29:59 | × | xff0x quits (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) (Ping timeout: 246 seconds) |
| 12:32:05 | → | [itchyjunk] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:32:06 | → | [_] joins (~itchyjunk@user/itchyjunk/x-7353470) |
| 12:32:34 | × | proboscis quits (~proboscis@115-189-81-94.mobile.spark.co.nz) (Ping timeout: 260 seconds) |
| 12:35:23 | → | yin joins (~z@user/zero) |
| 12:36:07 | × | [_] quits (~itchyjunk@user/itchyjunk/x-7353470) (Client Quit) |
| 12:37:38 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 12:38:05 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 12:40:38 | → | xff0x joins (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) |
| 12:41:47 | → | proboscis joins (~proboscis@115-189-83-206.mobile.spark.co.nz) |
| 12:42:50 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 12:44:59 | <yin> | sortOn is defined as `map snd . sortBy (comparing fst) . map (\x -> let y = f x in seq y (y,x))` |
| 12:45:41 | <yin> | this is referred to as a Schwartzian transform |
| 12:46:09 | <yin> | the advantage beying that it only evaluates f once for each element |
| 12:46:17 | <yin> | s/beying/being |
| 12:47:07 | <yin> | my question is, can the compiler optimize sortBy . comparing to this? |
| 12:47:28 | ← | thblt parts (~thblt@user/thblt) (ERC (IRC client for Emacs 28.0.50)) |
| 12:53:48 | × | max22- quits (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
| 12:54:54 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 12:56:41 | → | xsperry joins (~xs@user/xsperry) |
| 12:57:06 | → | Liudvikas joins (~Liudvikas@88.222.185.135) |
| 12:58:24 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 13:02:36 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 245 seconds) |
| 13:02:52 | <opqdonut> | yin: I don't think so. It'd be a complex Common Subexpression Elimination optimization that GHC doesn't do even in simple cases (AFAIK) |
| 13:03:30 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 13:10:20 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
| 13:11:17 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Read error: Connection reset by peer) |
| 13:12:00 | × | Midjak quits (~Midjak@82-65-111-221.subs.proxad.net) (Quit: Leaving) |
| 13:13:20 | → | Midjak joins (~Midjak@82-65-111-221.subs.proxad.net) |
| 13:16:48 | → | mikoto-chan joins (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
| 13:20:25 | × | Liudvikas quits (~Liudvikas@88.222.185.135) (Quit: Konversation terminated!) |
| 13:21:00 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 13:21:58 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 13:22:31 | → | pretty_dumm_guy joins (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
| 13:22:54 | <hippoid> | :t repeat (:) |
| 13:22:55 | <lambdabot> | [a -> [a] -> [a]] |
| 13:23:11 | <hippoid> | I'm stuck on how repeat can accept (:) as an argument |
| 13:23:27 | <hippoid> | my brain hasn't grokked how the types can unify |
| 13:24:36 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 13:25:12 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 13:26:35 | <Hecate> | % :t repeat |
| 13:26:35 | <yahb> | Hecate: a -> [a] |
| 13:26:37 | <xsperry> | it just creates a list of (:) functions.. ie [(:), (:), ..) |
| 13:26:56 | <Hecate> | % :t (:) |
| 13:26:56 | <yahb> | Hecate: a -> [a] -> [a] |
| 13:27:33 | <Hecate> | the 'a' is not the same |
| 13:27:36 | <hippoid> | xsperry: thanks. now it seems obvious |
| 13:28:19 | <hippoid> | so i suppose that means you can apply repeat to any type |
| 13:28:55 | <xsperry> | to a value of any type, yes |
| 13:28:59 | <xsperry> | :t repeat repeat |
| 13:29:00 | <lambdabot> | [a -> [a]] |
| 13:29:58 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 13:33:22 | → | jollygood2 joins (~bc8165b6@217.29.117.252) |
| 13:33:46 | <jollygood2> | :t repeat (repeat (repeat (:))) |
| 13:33:47 | <lambdabot> | [[[a -> [a] -> [a]]]] |
| 13:38:43 | <hpc> | now you can finally answer the question "how many arguments does id take?" |
| 13:42:41 | → | mc47 joins (~mc47@xmonad/TheMC47) |
| 13:43:26 | <jollygood2> | one, just like all functions. :P |
| 13:43:35 | <hpc> | :P |
| 13:43:51 | × | Guest31 quits (~Guest31@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds) |
| 13:46:50 | → | zero joins (~z@user/zero) |
| 13:48:32 | → | __monty__ joins (~toonn@user/toonn) |
| 13:49:17 | × | yin quits (~z@user/zero) (Ping timeout: 268 seconds) |
| 13:49:28 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 13:49:41 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Quit: Must not waste too much time here...) |
| 13:51:20 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
| 13:53:22 | × | __monty__ quits (~toonn@user/toonn) (Client Quit) |
| 13:54:51 | × | peterhil quits (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Client Quit) |
| 14:00:33 | → | Farzad joins (~FarzadBek@178.131.30.143) |
| 14:05:14 | × | dsrt^ quits (~dsrt@wsip-98-188-242-6.mc.at.cox.net) (Remote host closed the connection) |
| 14:09:05 | → | frx joins (~bc8165b6@cerf.good1.com) |
| 14:09:17 | frx | is now known as jacks4 |
| 14:11:46 | × | sqrt2 quits (~ben@80-108-18-7.cable.dynamic.surfer.at) (Ping timeout: 245 seconds) |
| 14:13:06 | → | sqrt2 joins (~ben@80-108-18-7.cable.dynamic.surfer.at) |
| 14:15:30 | × | gdd quits (~gdd@129.199.146.230) (Ping timeout: 260 seconds) |
| 14:16:39 | → | __monty__ joins (~toonn@user/toonn) |
| 14:17:06 | → | gdd joins (~gdd@129.199.146.230) |
| 14:20:23 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 14:22:00 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 14:22:06 | × | jollygood2 quits (~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Ping timeout)) |
| 14:26:30 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 14:26:54 | × | shailangsa quits (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) (Remote host closed the connection) |
| 14:31:10 | × | mikoto-chan quits (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds) |
| 14:32:46 | → | max22- joins (~maxime@2a01cb0883359800143d8394a75c565e.ipv6.abo.wanadoo.fr) |
| 14:33:10 | × | unit73e quits (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving) |
| 14:35:03 | → | yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
| 14:48:28 | → | machinedgod joins (~machinedg@24.105.81.50) |
| 14:49:10 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 14:52:21 | → | neurocyte0132889 joins (~neurocyte@45.93.111.195) |
| 14:52:21 | × | neurocyte0132889 quits (~neurocyte@45.93.111.195) (Changing host) |
| 14:52:21 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 14:55:11 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 14:55:36 | → | epolanski joins (uid312403@id-312403.helmsley.irccloud.com) |
| 14:55:46 | → | nrl^ joins (~nrl@wsip-98-188-242-6.mc.at.cox.net) |
| 14:59:52 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 15:01:31 | × | Farzad quits (~FarzadBek@178.131.30.143) (Quit: Leaving) |
| 15:02:27 | <maerwald> | the Haskell report talks about multipler function arguments in various places though, afair |
| 15:03:54 | → | sprout_ joins (~quassel@2a02:a467:ccd6:1:8872:6fff:30a7:51e0) |
| 15:04:16 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 245 seconds) |
| 15:07:25 | × | sprout quits (~quassel@2a02:a467:ccd6:1:21d2:19c0:e01b:f66c) (Ping timeout: 260 seconds) |
| 15:15:01 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
| 15:19:35 | <ksu> | 'unless' always reminds me of this great scene: https://www.youtube.com/watch?v=q_vGN9R3c3k |
| 15:21:49 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 15:24:07 | → | shailangsa joins (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) |
| 15:26:38 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 15:27:47 | × | DNH quits (~DNH@8.43.122.53) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 15:29:00 | × | akspecs__ quits (~akspecs@user/akspecs) (Ping timeout: 260 seconds) |
| 15:29:35 | → | jil joins (~user@160.120.146.111) |
| 15:29:39 | <jil> | hello |
| 15:31:05 | → | DNH joins (~DNH@8.43.122.53) |
| 15:32:47 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 15:32:50 | <jil> | I'm quit happy with the way I solved the 6th exercices of the 10th chapter of Hutton but not with the formatting of the code. I was not able to factorise the code snipet `(prev_ ++ next_)`. Please show me how to do so ? https://paste.debian.net/1217480 |
| 15:35:25 | × | hippoid quits (~idris@184.105.6.88) (Quit: Lost terminal) |
| 15:39:15 | × | mbuf quits (~Shakthi@171.61.246.251) (Quit: Leaving) |
| 15:48:04 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 15:50:09 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds) |
| 15:51:08 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 15:51:42 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 15:53:13 | → | fendor_ joins (~fendor@77.119.160.25.wireless.dyn.drei.com) |
| 15:56:02 | × | fendor quits (~fendor@178.115.79.50.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
| 15:58:20 | → | Jing_ joins (~textual@103.121.208.115) |
| 16:05:32 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 16:05:32 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 16:05:32 | → | wroathe joins (~wroathe@user/wroathe) |
| 16:07:41 | → | Null_A joins (~null_a@2601:645:8700:2290:714b:c982:dcb8:3f01) |
| 16:08:09 | <Cale> | jil: You could write something like let line = prev_ ++ next_ just above your if |
| 16:08:19 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 16:09:15 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 16:09:44 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 16:10:59 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 16:14:11 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 264 seconds) |
| 16:18:56 | <jil> | Hecate: gave me some courage in another channel and I came up with this https://paste.debian.net/1217484/ but I curious to try the let line , thank you Cale. |
| 16:20:18 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 16:20:44 | <jil> | Great. Thank you Cale |
| 16:21:20 | <kosmikus> | it's not entirely clear to me why you need both prev_ and next_ at all. it doesn't seem like you're doing anything anywhere that would require them to be separate from each other. |
| 16:22:46 | <jil> | yep you are correct kosmikus... and I should correct that. Thank you. |
| 16:24:09 | × | fendor_ quits (~fendor@77.119.160.25.wireless.dyn.drei.com) (Remote host closed the connection) |
| 16:24:53 | × | Vajb quits (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
| 16:25:22 | → | fendor joins (~fendor@77.119.160.25.wireless.dyn.drei.com) |
| 16:26:00 | → | __monty__ joins (~toonn@user/toonn) |
| 16:27:34 | <jil> | this is better https://paste.debian.net/1217486/ Merci |
| 16:28:13 | → | Vajb joins (~Vajb@ndtzwggz0g23egfbw-2.v6.elisa-mobile.fi) |
| 16:30:40 | <jil> | Is the way I user `LANGUAGE MultiWayIf` ok with your own style of coding. Or is my case too simple for it ? I sometime see haskell code with a load of options at the top and coming from python I find it strange. What's your point of view on this coding options ? |
| 16:32:35 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 16:33:05 | <dsal> | You mean language extensions? You can choose the ones that are right for you. Some are sort of "this should be on" and some are a bit stranger. I don't think I've ever been tempted to use MultiWayIf, but GHC2021 looks like this: https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/control.html |
| 16:33:54 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 16:35:49 | <jil> | Thank you dsal |
| 16:36:52 | → | fizzsegfaultbuzz joins (~segfaultf@135-180-0-138.static.sonic.net) |
| 16:42:38 | × | alx741 quits (~alx741@181.196.69.253) (Quit: alx741) |
| 16:49:53 | → | bitmapper joins (uid464869@id-464869.lymington.irccloud.com) |
| 16:51:37 | → | econo joins (uid147250@user/econo) |
| 16:53:04 | × | ByronJohnson quits (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Remote host closed the connection) |
| 16:56:39 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 16:56:43 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 16:59:47 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 264 seconds) |
| 17:00:41 | × | DNH quits (~DNH@8.43.122.53) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
| 17:03:01 | × | mjs2600 quits (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 245 seconds) |
| 17:03:25 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
| 17:03:37 | → | waleee joins (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
| 17:04:04 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 17:05:43 | → | tzh joins (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
| 17:08:50 | × | waleee quits (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds) |
| 17:09:18 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 17:10:06 | × | mmhat quits (~mmh@55d4be88.access.ecotel.net) (Quit: WeeChat 3.3) |
| 17:15:55 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 17:15:55 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 17:15:55 | → | wroathe joins (~wroathe@user/wroathe) |
| 17:16:24 | × | Null_A quits (~null_a@2601:645:8700:2290:714b:c982:dcb8:3f01) (Remote host closed the connection) |
| 17:17:33 | → | brainfreeze joins (~brainfree@2a03:1b20:4:f011::20d) |
| 17:20:16 | × | JimL quits (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 260 seconds) |
| 17:20:34 | × | wroathe quits (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
| 17:23:08 | → | JimL joins (~quassel@89-162-2-132.fiber.signal.no) |
| 17:25:16 | × | brainfreeze quits (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving) |
| 17:36:03 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 17:41:30 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
| 17:42:31 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 17:42:49 | × | jil quits (~user@160.120.146.111) (Remote host closed the connection) |
| 17:44:00 | → | lbseale joins (~lbseale@user/ep1ctetus) |
| 17:44:20 | → | akspecs__ joins (~akspecs@136-24-214-166.cab.webpass.net) |
| 17:44:20 | × | akspecs__ quits (~akspecs@136-24-214-166.cab.webpass.net) (Changing host) |
| 17:44:20 | → | akspecs__ joins (~akspecs@user/akspecs) |
| 17:44:49 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Remote host closed the connection) |
| 17:45:02 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 17:46:10 | → | lbseale_ joins (~lbseale@user/ep1ctetus) |
| 17:46:41 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 17:47:34 | → | lbseale__ joins (~lbseale@user/ep1ctetus) |
| 17:48:58 | × | xff0x quits (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) (Ping timeout: 260 seconds) |
| 17:49:36 | → | zincy_ joins (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
| 17:49:49 | → | xff0x joins (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) |
| 17:49:58 | × | lbseale quits (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds) |
| 17:51:22 | × | lbseale_ quits (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds) |
| 17:51:57 | → | peterhil joins (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
| 17:56:48 | × | mei quits (~mei@user/mei) (Read error: Connection reset by peer) |
| 17:57:59 | × | yrlnry quits (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 264 seconds) |
| 18:00:30 | × | werneta quits (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer) |
| 18:00:35 | × | Midjak quits (~Midjak@82-65-111-221.subs.proxad.net) (Quit: Leaving) |
| 18:00:43 | → | yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
| 18:01:11 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
| 18:02:09 | → | werneta joins (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
| 18:03:09 | → | DNH joins (~DNH@8.43.122.53) |
| 18:04:03 | → | aegon joins (~mike@174.127.249.180) |
| 18:04:36 | eco_ | is now known as eco |
| 18:04:45 | × | SethTisue__ quits (sid14912@ilkley.irccloud.com) (Ping timeout: 260 seconds) |
| 18:06:23 | × | yrlnry quits (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 264 seconds) |
| 18:07:56 | → | SethTisue__ joins (sid14912@id-14912.ilkley.irccloud.com) |
| 18:18:35 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 18:22:17 | → | Midjak joins (~Midjak@82-65-111-221.subs.proxad.net) |
| 18:26:12 | × | catman quits (~catman@user/catman) (Quit: WeeChat 3.4-dev) |
| 18:26:36 | → | gehmehgeh joins (~user@user/gehmehgeh) |
| 18:37:44 | × | hendursa1 quits (~weechat@user/hendursaga) (Quit: hendursa1) |
| 18:38:21 | → | hendursaga joins (~weechat@user/hendursaga) |
| 18:41:47 | × | euandreh quits (~euandreh@2804:14c:33:9fe5:eba7:95bb:d099:a7d8) (Ping timeout: 264 seconds) |
| 18:43:50 | → | alx741 joins (~alx741@181.196.69.253) |
| 18:45:03 | × | hendursaga quits (~weechat@user/hendursaga) (Remote host closed the connection) |
| 18:45:30 | → | hendursaga joins (~weechat@user/hendursaga) |
| 18:47:28 | → | wootehfoot joins (~wootehfoo@user/wootehfoot) |
| 18:51:18 | → | catman joins (~catman@user/catman) |
| 18:55:14 | × | lbseale__ quits (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds) |
| 19:01:39 | × | fvr quits (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
| 19:05:00 | → | Sgeo joins (~Sgeo@user/sgeo) |
| 19:05:45 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 19:10:38 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
| 19:23:44 | × | jacks4 quits (~bc8165b6@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
| 19:27:39 | × | notzmv quits (~zmv@user/notzmv) (Read error: Connection reset by peer) |
| 19:29:42 | → | notzmv joins (~zmv@user/notzmv) |
| 19:31:26 | × | acidsys quits (~LSD@2.lsd.systems) (Excess Flood) |
| 19:32:01 | → | acidsys joins (~LSD@2.lsd.systems) |
| 19:32:06 | → | ByronJohnson joins (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) |
| 19:33:15 | × | xff0x quits (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) (Ping timeout: 260 seconds) |
| 19:33:34 | × | shailangsa quits (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) (Remote host closed the connection) |
| 19:35:21 | → | xff0x joins (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) |
| 19:40:17 | × | proboscis quits (~proboscis@115-189-83-206.mobile.spark.co.nz) (Ping timeout: 264 seconds) |
| 19:40:49 | → | proboscis joins (~proboscis@115-189-130-93.mobile.spark.co.nz) |
| 19:48:17 | → | yrlnry joins (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
| 19:50:27 | × | zincy_ quits (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
| 19:52:18 | → | zincy_ joins (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
| 19:57:50 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection) |
| 19:57:51 | × | neurocyte0132889 quits (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat) |
| 20:00:08 | <maerwald> | MultiWayIf and LambdaCase I usually enable globally |
| 20:02:24 | → | neurocyte0132889 joins (~neurocyte@45.93.111.195) |
| 20:02:24 | × | neurocyte0132889 quits (~neurocyte@45.93.111.195) (Changing host) |
| 20:02:24 | → | neurocyte0132889 joins (~neurocyte@user/neurocyte) |
| 20:05:11 | × | juhp quits (~juhp@128.106.188.220) (Ping timeout: 264 seconds) |
| 20:05:12 | × | Vajb quits (~Vajb@ndtzwggz0g23egfbw-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
| 20:05:46 | → | Vajb joins (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
| 20:06:17 | × | wootehfoot quits (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
| 20:07:35 | → | juhp joins (~juhp@128.106.188.220) |
| 20:07:42 | <yushyin> | curious to see how many will replace multiwayif with lambdacases |
| 20:08:59 | <geekosaur> | mm, thye're not really either/or, MultiWayIf doesn't consume a parameter whereas LambdaCase does |
| 20:09:31 | <yushyin> | lambdacases, plural |
| 20:09:54 | → | rick_feynmann joins (~nick_all@139.102.124.132) |
| 20:10:34 | <yushyin> | geekosaur: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0302-cases.rst yet another syntax extension :& |
| 20:12:03 | × | lambdap quits (~lambdap@static.167.190.119.168.clients.your-server.de) (Quit: lambdap) |
| 20:12:22 | → | lambdap joins (~lambdap@static.167.190.119.168.clients.your-server.de) |
| 20:14:38 | <rick_feynmann> | so is there like a rules list or anything like that? first time in a irc chat. learning haskell and just learned about this channel. thought it would be nice to get away from the toxic kids in discord and learn some haskell and see what other developers are up to |
| 20:15:23 | <maerwald> | toxic kids on discord? :D |
| 20:15:27 | <juri_> | rule #1: don't be as asshole. :) |
| 20:15:34 | × | alx741 quits (~alx741@181.196.69.253) (Ping timeout: 260 seconds) |
| 20:15:47 | <hpc> | pretty much just the network rules |
| 20:16:09 | <rick_feynmann> | ok that makes sense. just checking |
| 20:16:40 | <geekosaur> | https://wiki.haskell.org/IRC_channel#Principles |
| 20:17:11 | <geekosaur> | and yes, basically "don't be a dick" |
| 20:17:24 | <maerwald> | good to see haskell wiki still exists |
| 20:17:45 | <hpc> | neat, that third bullet point is official rules |
| 20:18:34 | <hololeap> | anyone know of a way I can disable a line of doctest testing while keeping the same haddock formatting? |
| 20:19:21 | × | rick_feynmann quits (~nick_all@139.102.124.132) (Quit: Leaving) |
| 20:19:22 | × | proboscis quits (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
| 20:19:32 | <sm> | >>> -- ... ? |
| 20:20:01 | <maerwald> | you could probably just shadow the function in the setup directive |
| 20:20:29 | <maerwald> | at least with cabal-docspec that's possible I think |
| 20:20:57 | <hololeap> | shadow the function? |
| 20:21:00 | × | econo quits (uid147250@user/econo) (Quit: Connection closed for inactivity) |
| 20:21:01 | <maerwald> | or make a dummy function with trailing underscore |
| 20:21:07 | <maerwald> | that does nothing |
| 20:21:27 | → | jinsun__ joins (~quassel@user/jinsun) |
| 20:22:07 | → | rick_feynmann joins (~nick_all@139.102.124.132) |
| 20:22:17 | → | proboscis joins (~proboscis@115-189-130-93.mobile.spark.co.nz) |
| 20:23:47 | × | MQ-17J quits (~MQ-17J@8.6.144.203) (Read error: Connection reset by peer) |
| 20:24:41 | × | jinsun quits (~quassel@user/jinsun) (Ping timeout: 245 seconds) |
| 20:24:41 | → | MQ-17J joins (~MQ-17J@8.6.144.203) |
| 20:24:54 | × | rick_feynmann quits (~nick_all@139.102.124.132) (Quit: Leaving) |
| 20:24:58 | <maerwald> | yes, works with cabal-docspec |
| 20:25:29 | <maerwald> | -- $setup |
| 20:25:30 | <maerwald> | >>> let shadowedFunct _ _ = False |
| 20:25:47 | <maerwald> | sth like that |
| 20:28:13 | → | alx741 joins (~alx741@181.196.69.253) |
| 20:28:15 | → | shailangsa joins (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) |
| 20:29:07 | × | proboscis quits (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
| 20:29:55 | → | proboscis joins (~proboscis@115-189-130-93.mobile.spark.co.nz) |
| 20:33:00 | × | FinnElija quits (~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija) |
| 20:34:56 | → | cjb joins (~cjbayliss@user/cjb) |
| 20:35:03 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 20:36:16 | → | FinnElija joins (~finn_elij@user/finn-elija/x-0085643) |
| 20:36:37 | <hololeap> | this is what fails: https://github.com/dhall-lang/dhall-haskell/blob/master/dhall-toml/src/Dhall/DhallToToml.hs#L218-L219 |
| 20:37:47 | <hololeap> | this is the error I get: http://sprunge.us/nrvtl0 |
| 20:38:40 | × | [itchyjunk] quits (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
| 20:39:04 | <hololeap> | I'm trying to package dhall-toml for gentoo and while I know it is silly to disable a test that isn't passing, as long as I have it well documented it makes sense, considering every other test passes. |
| 20:39:56 | <sclv> | if the test isn't passing you should file a ticket -- it seems like their error! |
| 20:40:16 | <hololeap> | yeah, but in the meantime, I want to package this |
| 20:41:05 | <sclv> | then remove the formatting from the block in the meantime, or change the test so it passes |
| 20:41:48 | × | catman quits (~catman@user/catman) (Read error: Connection reset by peer) |
| 20:42:03 | → | NoidedSuper joins (~manjaro-u@2601:280:5a81:520::f8be) |
| 20:42:04 | geekosaur | wonders if the latter is reliably possible |
| 20:42:14 | <sclv> | afaik there's no way to leave the cmd exactly the same and fully disable the test. |
| 20:42:17 | <sclv> | er the haddock |
| 20:42:24 | → | mvk joins (~mvk@2607:fea8:5cc1:300::d3fb) |
| 20:42:28 | <geekosaur> | if it's say using HashMap is it guaranteed to use the same order every time? |
| 20:42:47 | <Hecate> | https://www.reddit.com/r/haskell/comments/qjxjh5/ann_jordan_abstract_inspectable_json/ |
| 20:42:50 | <Hecate> | noice |
| 20:42:51 | <sclv> | i suspect in this case its swapped the hashmap for the ordmap in the latest, so its more reliable now! |
| 20:43:15 | <sclv> | (latest aeson) |
| 20:43:48 | <hololeap> | yeah, it's a hashmap, it seems: https://hackage.haskell.org/package/tomland-1.3.3.0/docs/Toml-Type-TOML.html#t:TOML |
| 20:44:06 | <NoidedSuper> | That Jordan library looks sick Hecate, I bet the guy who wrote it is smart and attractive |
| 20:44:31 | <NoidedSuper> | (I wrote it :D. You have no idea how hype I am that people are finding it cool enough to share) |
| 20:46:42 | → | econo joins (uid147250@user/econo) |
| 20:46:50 | <hololeap> | which explains why it fails with the inner list being out of order |
| 20:47:43 | → | fog joins (~fog@176-157-77-163.abo.bbox.fr) |
| 20:48:15 | → | catman joins (~catman@user/catman) |
| 20:50:16 | × | fog quits (~fog@176-157-77-163.abo.bbox.fr) (Client Quit) |
| 20:50:31 | → | fen joins (~fen@176-157-77-163.abo.bbox.fr) |
| 20:50:57 | → | euandreh joins (~euandreh@2804:14c:33:9fe5:af93:19b0:8b26:3fa2) |
| 20:51:17 | × | fen quits (~fen@176-157-77-163.abo.bbox.fr) (Client Quit) |
| 20:51:34 | → | motle joins (~motle@176-157-77-163.abo.bbox.fr) |
| 20:51:40 | × | motle quits (~motle@176-157-77-163.abo.bbox.fr) (Client Quit) |
| 20:52:10 | → | dartford joins (~dartford@176-157-77-163.abo.bbox.fr) |
| 20:52:20 | <dartford> | hi! |
| 20:52:45 | <dartford> | >700 users online! iv never seen it so busy |
| 20:52:52 | <dartford> | anyone active? |
| 20:52:59 | <geekosaur> | yes |
| 20:53:03 | <dartford> | woop! |
| 20:53:14 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
| 20:53:17 | <geekosaur> | and we've been riding over 700 users for a couple of months now |
| 20:53:31 | × | chomwitt quits (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Read error: Connection reset by peer) |
| 20:53:40 | <geekosaur> | the move from fn did shake out a bunch of never-active folks though |
| 20:53:49 | <dartford> | awesome, i want to ask about probabilistic models in streaming space models as state traversals |
| 20:54:31 | <sm> | some of them moved to #haskell:matrix.org |
| 20:54:43 | <dartford> | geekosaur: i guess there are some more people learning haskell each year, or maybe people from other languages migrating |
| 20:55:46 | <dartford> | basically, im not too used to using nestings of monads - with "the probability monad" etc needing to go along with the "state applicative" in the traversal |
| 20:56:17 | <dartford> | if it were me, id just "partition" the state, but i gather that this isnt idomatic haskell, and monad transformers or something is |
| 20:56:38 | <dartford> | like, keep the random seed as "part" of the state |
| 20:56:41 | <dartford> | somehow... |
| 20:57:07 | <dartford> | but i dont want to get frustrated by trying to then have a nested datatype for the state that would need its own lesnses |
| 20:57:20 | <dartford> | does that make sense? |
| 20:57:45 | <Rembane_> | dartford: What stops you from having the state as an argument to the functions working on it? |
| 20:57:54 | <dartford> | pardon? |
| 20:58:09 | <dartford> | im not sure what you mean, or why you think im saying that |
| 20:58:53 | → | kupi joins (uid212005@id-212005.hampstead.irccloud.com) |
| 20:59:24 | <Rembane_> | I don't think I'm understanding what the problem you are trying to solve is, which makes me ask the wrong question. Sorry about that. |
| 20:59:28 | <dartford> | :t mapAccumL |
| 20:59:29 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
| 20:59:43 | <dartford> | the state is `a' there, the functions act on it just fine |
| 20:59:55 | <dartford> | this is the archetypal "state traversal" |
| 21:00:11 | <dartford> | ie, traverse, but where the applicative is chosen to be StateL |
| 21:01:01 | <dartford> | what im saying is i would replace the polymorphic type `a' by something with a lens into the "seed" for an RNG that allows PDFs to be worked with |
| 21:01:16 | → | mestre joins (~mestre@191.177.175.57) |
| 21:01:32 | <dartford> | so that on each encountered element, the new seed can be updated into its portion of the state |
| 21:02:11 | <dartford> | normally people use monad transformers for this partitioning of reader/writer/state monads |
| 21:02:28 | <dartford> | instead of lenses into the "seed part" |
| 21:02:36 | <dartford> | see what i mean? |
| 21:03:07 | <dartford> | im confused about if im supposed to use lenses or nested monads or what |
| 21:03:34 | <hololeap> | It seems like you just want a regular State monad to me |
| 21:03:52 | <dartford> | thats already factored into mapAccumL |
| 21:03:59 | <dartford> | really i should be using traverse, sorry |
| 21:04:02 | <dartford> | :t traverse |
| 21:04:03 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
| 21:04:17 | → | zebrag joins (~chris@user/zebrag) |
| 21:04:41 | <dartford> | so thats `f' in the type signature, which should hold both the RNG seed, and anything else thats an "updated carry" |
| 21:05:10 | <dartford> | i guess its a question about composite data, and nested datatypes vs monad transformers |
| 21:05:53 | <dartford> | ie, it would be a composition of monads that would still have the applicative instance of StateL to allow it to scan properly |
| 21:06:00 | <dartford> | i think... |
| 21:07:50 | <hololeap> | % :t \f -> runState . traverse (state . f) |
| 21:07:50 | <yahb> | hololeap: Traversable t => (a -> s -> (b, s)) -> t a -> s -> (t b, s) |
| 21:07:55 | <dartford> | https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Traversable.html#mapAccumL |
| 21:08:20 | <dartford> | ah, your implementation is much better, it doesnt use coerce |
| 21:08:22 | <dartford> | thanks |
| 21:08:23 | <hololeap> | so you are correct that mapAccum is the same as traverse over some State |
| 21:08:42 | <dartford> | thats why i was calling it a "state traversal" - basically a scanner |
| 21:09:02 | <dartford> | and im calling the `s' variable a "carried state" |
| 21:09:13 | <dartford> | and the whole thing is a "streaming state space model" |
| 21:09:20 | <hololeap> | but I think you might be overcomplicating things. what you're looking for doesn't need a huge monad transformer stack |
| 21:09:34 | <dartford> | since StateL is lazy, so it can work over infinite streams, unlike plain old traverse |
| 21:09:50 | <dartford> | i think theres a superclass proposal in their somewhere |
| 21:10:17 | <dartford> | hololeap: sure, i mean, i could use a lens, but thats more complicated right? |
| 21:10:23 | × | ec quits (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
| 21:10:37 | <dartford> | like, i was assuming the monad transformer stack way was actually easyer than the nested datatype way then |
| 21:10:53 | <dartford> | since there is some subtle handling of the algebra of monadic composition or something |
| 21:10:57 | <hololeap> | no, none of this stuff is complicated. it's quite basic really, perhaps more basic than you're expecting |
| 21:10:58 | <dartford> | i never fully understood it |
| 21:11:22 | <dartford> | ok, so that way you need the existance of a lens in the constraint |
| 21:11:29 | → | ec joins (~ec@gateway/tor-sasl/ec) |
| 21:11:47 | <hololeap> | @hoogle zoom |
| 21:11:47 | <lambdabot> | Control.Lens.Combinators zoom :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c |
| 21:11:47 | <lambdabot> | Control.Lens.Zoom zoom :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c |
| 21:11:47 | <lambdabot> | Diagrams.Prelude zoom :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c |
| 21:12:00 | <dartford> | something like; CanUpdateTheSeed f,ApplicativesLikeStateL f => |
| 21:12:34 | <dartford> | ok, lets not *actually* use lens |
| 21:12:35 | × | proboscis quits (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
| 21:12:47 | <dartford> | i cant read those type signatures and id prefer not to have to learn how to |
| 21:12:50 | → | proboscis joins (~proboscis@115-189-130-93.mobile.spark.co.nz) |
| 21:13:02 | <dartford> | i mean, this is the main reason im leaning towards the nested monads way |
| 21:13:14 | × | tabemann quits (~travisb@2600:1700:7990:24e0:95ab:c391:8962:61e4) (Remote host closed the connection) |
| 21:13:14 | <hololeap> | there's something that I'm looking for that you may be interested in |
| 21:13:26 | <dartford> | actually, i think the only way it would work is if they were both States |
| 21:13:33 | → | tabemann joins (~travisb@2600:1700:7990:24e0:25bd:a66c:dc78:d416) |
| 21:13:38 | <hololeap> | but really you will be passing some concrete state around and you should know how to modify it, with or without lenses |
| 21:13:40 | <dartford> | but i guess this could be relaxed to parts being only Reader or Writer |
| 21:14:44 | <dartford> | ok, so suppose the only thing i ever read+write is the RNG seed, but i also accumulate some data into a writer |
| 21:15:14 | <dartford> | like, i grow a list of accumulated elements |
| 21:15:27 | <hololeap> | do you even need a Writer here? do you have some monoidal data that you want to append to as a side-effect? |
| 21:15:31 | → | acidjnk joins (~acidjnk@p5487d843.dip0.t-ipconnect.de) |
| 21:15:45 | <dartford> | something like using cons to update the state, but not actually using it, in mapAccumL |
| 21:15:49 | <dartford> | :t mapAccumL |
| 21:15:50 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
| 21:16:38 | <dartford> | i thought if you update it you need writer... |
| 21:17:04 | <dartford> | er, ok nvm lets just use full state |
| 21:17:15 | <dartford> | since it would need to be read to update it |
| 21:17:27 | <dartford> | :t mapAccumL (\_ b -> (b:?,undefined)) |
| 21:17:28 | <lambdabot> | error: |
| 21:17:28 | <lambdabot> | A section must be enclosed in parentheses thus: (b :?) |
| 21:17:34 | <dartford> | oops! |
| 21:17:48 | <hololeap> | https://hackage.haskell.org/package/optics-extra-0.4/docs/Optics-Zoom.html |
| 21:17:50 | <dartford> | like, it needs the `a' not to be a wildcard above |
| 21:18:01 | <dartford> | hololeap: i really want to avoid lenses |
| 21:18:23 | <hololeap> | ok, it seemed like you were interested earlier |
| 21:18:50 | <dartford> | i was presenting 2 alternatives, and asking about the other |
| 21:19:05 | <dartford> | well, i kind of forgot how difficult i find lesnse |
| 21:19:20 | <hololeap> | you might like this optics library a little better |
| 21:19:29 | <dartford> | im sorry |
| 21:19:35 | × | Alleria quits (~textual@user/alleria) (Remote host closed the connection) |
| 21:19:41 | <hololeap> | just for future reference |
| 21:20:03 | <dartford> | its illegible, im sorry |
| 21:20:03 | × | proboscis quits (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
| 21:20:25 | <hololeap> | yeah it takes some getting used to, for sure, and the type signatures don't help much, unfortunately |
| 21:20:30 | <dartford> | even if it did exactly what i described, its impenetrable |
| 21:20:31 | → | proboscis joins (~proboscis@14.137.28.197) |
| 21:20:43 | <dartford> | none of it helps at all! |
| 21:21:08 | <dartford> | it has some inklings that its the right thing, suggesting you can "change part of the state" |
| 21:21:25 | <dartford> | but i can say that quite easily, "the rng would have its own lens" |
| 21:21:31 | <dartford> | i just use that term to comunicate |
| 21:21:41 | <dartford> | i have no intension of ever wrangling with its machinery |
| 21:22:29 | <dartford> | i use deep extensible generic containers instead of anything to do with records, is the actual reason for my hesitance |
| 21:22:36 | <dartford> | but this is an asside |
| 21:22:49 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection) |
| 21:23:04 | <dartford> | the only relavence being, this is not yet something we have a unified approach too |
| 21:23:10 | <dartford> | "change that part of it" |
| 21:23:25 | <dartford> | easyer said than done! |
| 21:23:42 | <dartford> | my approach uses algebraic pointers instead of string symbol records |
| 21:23:52 | → | yauhsien joins (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
| 21:24:04 | <dartford> | "down 3 levels, along 2, down until the leaf" kind of thing |
| 21:24:29 | <dartford> | these directions are equivalent, and i spent years developing it. im not going to start on with symbolic records now |
| 21:24:49 | <dartford> | you cant add together records... thats why i bang on about mine being algebraic |
| 21:24:59 | <dartford> | navigations compose... |
| 21:25:24 | → | lavaman joins (~lavaman@98.38.249.169) |
| 21:25:26 | <dartford> | but then, when everything is an nd grid, where positions make a lot of sense, |
| 21:25:35 | <dartford> | and then *only one of them is special* |
| 21:25:40 | <dartford> | because its the RNG seed |
| 21:25:43 | <dartford> | i get scuppered |
| 21:26:11 | <dartford> | i figured the easyest way would just be to wrap it up in the probability monad |
| 21:26:24 | <dartford> | and do the monad transformer stack way instead |
| 21:26:51 | <hololeap> | what you're calling "the probability monad" is just State carrying around some random seed, right? |
| 21:27:02 | <dartford> | (instead, of having the seed as part of the datatype, and reserving that extensible domain for the euclidian grid) |
| 21:27:04 | <hololeap> | and perhaps some other info |
| 21:27:23 | <dartford> | hololeap: exactly, essentially just a tuple with an Int, nothing that should be too difficult... |
| 21:27:26 | × | proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 260 seconds) |
| 21:27:43 | <dartford> | (Int,BigCrazyExtensibleGraphThing) |
| 21:27:45 | → | proboscis joins (~proboscis@14.137.28.197) |
| 21:27:53 | → | unit73e joins (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
| 21:28:17 | <dartford> | its just, this form of "extension", pairing it with the seed int, isnt the same way as the graph is extended |
| 21:28:20 | <sclv> | that seems very reasonable |
| 21:28:34 | <dartford> | cheers! |
| 21:28:35 | × | yauhsien quits (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 264 seconds) |
| 21:28:44 | <dartford> | so wtf do i do!? |
| 21:29:16 | <sclv> | what do you mean. you just described what you do |
| 21:29:24 | <sclv> | you have a state monad that has a pair in the state |
| 21:29:37 | <dartford> | i mean, i dont know how to work with monad transformers |
| 21:29:46 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 21:29:50 | <sclv> | you don't need a transformer if you just have a single state with a pair in the state |
| 21:30:08 | <dartford> | i reccon to presereve the lazy StateL business, for the stream transduction, so i need a similar Applicative instance for the (Int,) |
| 21:30:32 | <dartford> | sclv: oh, i think i was anticipating its partial application |
| 21:30:37 | → | img joins (~img@user/img) |
| 21:30:47 | <dartford> | like, so i could do "probabilistic scanning" |
| 21:30:57 | <dartford> | as a thing that was already abstracted |
| 21:31:02 | <dartford> | if that makes any sense at all |
| 21:31:17 | <dartford> | like, handling this "top layer" already |
| 21:31:20 | <sclv> | just follow the types -- you can adapt any functions that worked over the old state to work over one component of the tuple |
| 21:31:25 | <dartford> | ie, having to partition it into layers |
| 21:31:38 | <dartford> | thats why i was considering the monad transformer stack to begin with |
| 21:32:11 | × | proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 264 seconds) |
| 21:32:36 | <dartford> | sclv: i want to compose two lazy "StateL style" applicatives together to get a new lazy StateL applicative style thing |
| 21:32:48 | <dartford> | so the scanners work |
| 21:32:55 | <sclv> | what is a StateL |
| 21:33:00 | <sclv> | also applicatives compose directly |
| 21:33:02 | <dartford> | if the applicative instances dont *compose* then this wont work |
| 21:33:13 | <dartford> | they are different instances |
| 21:33:20 | <dartford> | and a new instance is required for their nesting |
| 21:33:27 | <sclv> | https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Functor-Compose.html#t:Compose |
| 21:33:30 | <dartford> | thats the kind of composition i mean. not <*> |
| 21:34:05 | <dartford> | oh, sorry, you were talking about the same form of composition... |
| 21:34:15 | <dartford> | im just concerned it wont preserve the lazyness |
| 21:34:29 | <sclv> | if you don't need monad composition, just applicative composition, it comes via Compose, no transformers necessary |
| 21:34:29 | <dartford> | not all applicatives end up producing lazy traversals, but StateL does... |
| 21:34:39 | <dartford> | nice! |
| 21:34:41 | <dartford> | thanks |
| 21:34:49 | <dartford> | what about the lazyness consideration though? |
| 21:35:01 | <dartford> | i guess they are both StateL actually... |
| 21:35:18 | <dartford> | does that have its own rule for how it forms a new applicative via use of Compose? |
| 21:35:44 | <dartford> | like, StateL is basically just a tuple at the end of the day, iirc |
| 21:36:00 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 21:36:07 | <dartford> | so it should work for how i want it to handle the RNG seed |
| 21:36:10 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
| 21:36:15 | → | lavaman joins (~lavaman@98.38.249.169) |
| 21:36:21 | <sclv> | your description is both very specific and vague |
| 21:36:22 | × | lavaman quits (~lavaman@98.38.249.169) (Remote host closed the connection) |
| 21:36:31 | <sclv> | take a look at the source and try it out and see if it works how you expect https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Functor-Compose.html#t:Compose |
| 21:36:41 | <dartford> | basically, this describes an extensible deep datatype equivalent, instead of nested pairs, as nested StateL applicatives |
| 21:37:01 | <dartford> | motivated by its use for scanning |
| 21:37:05 | <dartford> | (!) |
| 21:37:14 | <dartford> | (seems like a result, right?) |
| 21:37:41 | <dartford> | Q"which kind of extensible generic lens thingy do i need" ? |
| 21:37:52 | <dartford> | A: nested StateL applicatives using Compose |
| 21:38:00 | <dartford> | peer review?# |
| 21:38:35 | <dartford> | what do you reccon? |
| 21:39:03 | <sclv> | i genuinely can't follow. just try what i suggested and post some much more specific actual code in a pastebin if you need more advice. |
| 21:39:18 | <dartford> | peer review denied. |
| 21:39:23 | <dartford> | ok, thanks for the help |
| 21:40:10 | <dartford> | really hate it when that happens! |
| 21:40:31 | <dartford> | anyone that understood could chip in? |
| 21:41:14 | <geekosaur> | I don't think any of us really understood |
| 21:42:02 | <dartford> | well, regardless of that assertion, im not going to be roped into another explanation if this one would do |
| 21:42:11 | <dartford> | like, maybe you just cant be bothered, idk! |
| 21:42:25 | <dartford> | this is bat country |
| 21:42:39 | <dartford> | rabbit holes must be avoided |
| 21:43:14 | <geekosaur> | it's not that we can't be bothered, it's that your attempts at describing what you're doing is really confusing. like you're not quite speaking the same language we do |
| 21:44:03 | <geekosaur> | I've been sitting here trying to follow the discussion and just getting more and more confused as it went on |
| 21:46:54 | × | Jing_ quits (~textual@103.121.208.115) (Remote host closed the connection) |
| 21:47:09 | × | eggplantade quits (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection) |
| 21:47:31 | → | brainfreeze joins (~brainfree@2a03:1b20:4:f011::20d) |
| 21:49:34 | <dartford> | hmm, thats quite bad |
| 21:50:14 | → | nickkkkk_all joins (~nick_all@139.102.124.132) |
| 21:50:39 | <dartford> | i thought the conclusion that the compositional thing i was after, wasnt a monad transformer stack, or a deep nested record, but was Applicatives - specifically StateL, composed using Data.Functor.Compose - seemed like a really good result |
| 21:50:56 | <dartford> | and then your like "dude, i cant follow, spoonfeed us" |
| 21:51:39 | → | eggplantade joins (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
| 21:51:44 | <dsal> | Sometimes when communication isn't effective, the communicator needs to do a better job. |
| 21:51:47 | <dartford> | erm, oh right, maybe you dont understand why StateL is motivated by scanners, aka "state traversals" - for lazy compositional stream transduction |
| 21:52:24 | × | gehmehgeh quits (~user@user/gehmehgeh) (Quit: Leaving) |
| 21:52:35 | <dartford> | dsal: great advice, in general. but totally useless in an actual setting where specific inquisitiveness would be required to try to fathom what was so apparently difficult to understand |
| 21:52:49 | <dartford> | otherwise im just left guessing |
| 21:52:57 | <dartford> | maybe thats direction enough, but not for me |
| 21:53:15 | <geekosaur> | well, for one example you keep saying "lens" but I keep getting the impression you don't mean the same thing we do when we say it |
| 21:53:17 | <dsal> | When nobody understands you, it's not everyone else who's at fault. |
| 21:53:24 | <dartford> | "frustrate them towards their goal" being, like, kind of, suboptimal from *my* perspective |
| 21:53:26 | <hololeap> | it seems to me that you are over-abstracting the problem which leads to overly-complex ideas like BigCrazyExtensibleGraphThing and "probabilistic scanning". work on refining it until you have NiceEasyToUnderstandAndExplainThing |
| 21:53:36 | ← | ksu parts (~ksu@user/prtr) (End of Transmission Block) |
| 21:53:56 | <dartford> | geekosaur: seems like lens "means" - i can get at part of it |
| 21:54:26 | <hololeap> | lens is really just a convenience thing. they don't do anything that you couldn't already do without them |
| 21:54:34 | <dartford> | if thats a confusing way to use the word ill opt for a disambiguation, but since this seems like what we understand it to mean, i dont think thats nesacary |
| 21:54:52 | <dartford> | i just have to explain that i dont want to actually use someone elses machinery since im developing my own |
| 21:54:54 | × | tabemann quits (~travisb@2600:1700:7990:24e0:25bd:a66c:dc78:d416) (Quit: Leaving) |
| 21:55:10 | <dartford> | well, its motivated by scanning |
| 21:55:11 | <geekosaur> | "lens" describes a specific data access mechanism based on van Laarhoven lenses |
| 21:55:25 | <dartford> | we wouldnt have arived at Comosed StateL applicatives without that as the specifying thing |
| 21:55:40 | <dartford> | and basically, what we end up constructing is a "BIGCRAZYEXTENSIBLETHING" |
| 21:55:48 | <dartford> | so no, i dont think those are superflous notions |
| 21:55:55 | <dartford> | they are infact, almost all of the actual thing |
| 21:56:04 | <geekosaur> | there are some other varieties but they all do the same basic thing, they're a specific way to access data, not a general/vague description of accessing data |
| 21:56:32 | <dartford> | geekosaur: yeah exactly, a getter and a setter, being able to access part of the thing |
| 21:56:41 | <dartford> | "access" |
| 21:56:41 | → | tabemann joins (~tabemann@2600:1700:7990:24e0:25bd:a66c:dc78:d416) |
| 21:56:54 | <dartford> | "lens" into it |
| 21:57:09 | <dartford> | its a common term and im using it correctly |
| 21:57:33 | <dartford> | but, no records, please |
| 21:58:04 | <dartford> | if the RNG seed is on the outer layer, i will use this *positional* information only |
| 21:58:13 | × | zincy_ quits (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
| 21:58:16 | <dartford> | layered pairs essentially |
| 21:58:19 | <dartford> | everything is |
| 21:58:34 | <dartford> | thats why its what your true love gives to you on the first day of christmas |
| 21:58:42 | <dartford> | "part"ridges, in *pair* trees |
| 21:58:53 | × | mestre quits (~mestre@191.177.175.57) (Quit: Lost terminal) |
| 21:59:00 | <dartford> | deep theorm there, but just a mnemonic |
| 22:00:02 | <dartford> | im just contesting having to write carrot underscore RNG_ update zoom underscore |
| 22:00:19 | <dartford> | which i dont believe is at all legible |
| 22:00:32 | <dartford> | "update the outer layer, remember which layer is which" |
| 22:00:39 | <dartford> | is my preferred approach |
| 22:01:19 | <dartford> | anyway, this is why i refuse to be gauded into further explanations, my first one was fine |
| 22:01:26 | <dartford> | now im just getting pissed |
| 22:01:30 | <dartford> | i appologise |
| 22:03:01 | <dartford> | i guess really my problem is that in an ND cartesian domain, which has easily interpretable "dimension" as the layers, having the outer layer as a plain Int is totally different, so doesnt fit into my usual abstraction as every nesting being wrapping in a list |
| 22:03:23 | <dartford> | now its pairing with an int instead of wrapping with a list, so i get confused, but i guess the notion of position is still good |
| 22:03:29 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 22:03:31 | <dartford> | how deep it is, being what im calling position |
| 22:04:39 | <dartford> | ahhh |
| 22:04:55 | <dartford> | yeah its quite reasonable im concerned, a pair is essentially a length restricted list |
| 22:05:13 | <dartford> | im used to always being able to say "go down a bit, go along a bit, go down a bit more" etc |
| 22:05:21 | <dartford> | but with a pair there is no "going along a bit" |
| 22:05:35 | → | zincy_ joins (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
| 22:05:40 | <dartford> | i suppose if i have extent restricted layers, it would just throw a type error if i tried to "go along" |
| 22:05:42 | × | nickkkkk_all quits (~nick_all@139.102.124.132) (Ping timeout: 260 seconds) |
| 22:05:45 | <dartford> | on the Int level |
| 22:06:10 | <dsal> | You're gonna have a pretty hard time in general if you continue to assert that you're good at explaining things while ignoring evidence from people who fail to understand your explanations. |
| 22:06:30 | <hololeap> | I think Data.Tree (rose trees) would model an n-dimensional cartesian domain just fine, wouldn't they? |
| 22:06:31 | <dartford> | er, actually yeah, you do have the option to "go along" either the first or second element, so i can just use the same concept of typesafe navigation |
| 22:06:50 | dsal | goes to play with chainsaws instead |
| 22:06:53 | → | lavaman joins (~lavaman@98.38.249.169) |
| 22:07:31 | <dartford> | thanks for that. im just saying, when i ask for help, you say "do more work - we cant understand" and im like "that wouldnt actually help" |
| 22:07:43 | <dartford> | see what i mean... |
| 22:07:49 | <dartford> | "no, we dont" |
| 22:08:03 | <dartford> | and im like "dsal, wait for me, i want to play too" |
| 22:08:11 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 264 seconds) |
| 22:08:27 | <dartford> | hololeap: this is the theorem |
| 22:08:34 | <dartford> | all is trees |
| 22:08:36 | × | zebrag quits (~chris@user/zebrag) (Remote host closed the connection) |
| 22:09:00 | <dartford> | even if some of the branches are just pairs |
| 22:09:22 | <dartford> | i guess the point is youd better remember how wide the branches are everywhere |
| 22:09:32 | → | zebrag joins (~chris@user/zebrag) |
| 22:09:43 | <dartford> | which is what you get for doing away with string symbol labels, aka records |
| 22:09:53 | <dartford> | which is what edkmet lenses use |
| 22:10:05 | × | zebrag quits (~chris@user/zebrag) (Remote host closed the connection) |
| 22:10:11 | <dartford> | right, i finally said that comprehensibly |
| 22:10:15 | <dartford> | so sorry |
| 22:11:10 | <hololeap> | so at each node, you have zero or more child nodes, correct? and you want to memoize the number of children for each node? and also an RNG for some reason? haha |
| 22:11:27 | <hololeap> | trying to piece it together |
| 22:11:47 | × | lavaman quits (~lavaman@98.38.249.169) (Ping timeout: 264 seconds) |
| 22:11:51 | <dartford> | one or more |
| 22:11:55 | <dartford> | nonempty lists |
| 22:11:59 | <dartford> | no "shaped empty" |
| 22:12:11 | <dartford> | [[],[]] is disalowed for example |
| 22:12:28 | <dartford> | just for the sake of it, it was a glitch i kept encountering |
| 22:12:46 | <dartford> | hololeap |
| 22:12:55 | <dartford> | its for probabalistic scanning |
| 22:13:07 | <dartford> | thats why we ended up with StateL where pairs used to be |
| 22:13:32 | <dartford> | to get the lazyness of mapAccumL |
| 22:13:44 | <dartford> | for lazy stream transduction |
| 22:13:49 | <hololeap> | ok, what would the termination state be for a each node, to say "the tree stops here". if it is required to have at least one child it would be infinite, which sounds like why you are trying to figure out this laziness thing |
| 22:14:16 | <dartford> | no, the length of the rose trees branches can be infinite |
| 22:14:22 | <dartford> | its not strictly infinite in depth |
| 22:14:26 | <dartford> | it can terminate at a value |
| 22:14:37 | <dartford> | though it can be recursive |
| 22:14:54 | <dartford> | but thats handled slightly differently since it has to be labled, not really whats being discussed here |
| 22:15:08 | <dartford> | we can stick to just considering scanning over a list for simplicity |
| 22:15:17 | <dartford> | a strictly infinite stream rather |
| 22:15:24 | <dartford> | for instance an IOList |
| 22:15:45 | × | mc47 quits (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
| 22:16:12 | <dartford> | like, the server can just keep returning requests, no real notion of the "end of the list" |
| 22:16:18 | <dartford> | so it *needs* to be lazy |
| 22:16:22 | <dartford> | you *cant* use traverse |
| 22:16:33 | <dartford> | well, unless its restricted to StateL as the applicative |
| 22:16:42 | <dartford> | or some other "lazy applicative" |
| 22:16:52 | <dartford> | some applicatives would force evaluation of the whole thing |
| 22:17:07 | <dartford> | thats why i talk about mapAccumL and scanners as if they are a seperate thing to traverse |
| 22:17:32 | <dartford> | traverse + StateL = scanners, basically |
| 22:17:52 | <dartford> | scanners, being always lazy, form an algebra for stream transduction |
| 22:18:10 | <dartford> | anyway, i forgot the question, i hope that clears something up at least |
| 22:18:18 | <dartford> | i dont really want to just keep explaining that point |
| 22:18:22 | <dartford> | but thats the central point |
| 22:18:29 | <dartford> | about the lazy stream algebra |
| 22:18:49 | <dartford> | offered by scanners, as a distinction from the rest of Traversable |
| 22:19:17 | <hololeap> | I wonder if something like conduit might fit your use case |
| 22:19:33 | <dartford> | yeah, this replaces that |
| 22:19:41 | <dartford> | with actual theorems |
| 22:19:45 | <dartford> | in idomatic haskell |
| 22:19:53 | <dartford> | acording to the class hierarchy of the prelude |
| 22:20:05 | <dartford> | scanners beat conduits! |
| 22:20:16 | × | NoidedSuper quits (~manjaro-u@2601:280:5a81:520::f8be) (Remote host closed the connection) |
| 22:20:49 | → | burnsidesLlama joins (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
| 22:21:22 | <dartford> | its not hard to understand why. its because of that point about lazyness, that allows them to be scanned repeatedly, since each of them actually returns |
| 22:21:41 | <dartford> | so notionally, its as if it does one element at a time, passing it through *each* scanner applied |
| 22:21:49 | <dartford> | as if the scanners were algebraically composed |
| 22:22:15 | <dartford> | this compositionality being what conduit does, but in a much less direct way |
| 22:22:43 | → | zebrag joins (~chris@user/zebrag) |
| 22:22:45 | <dartford> | the lazyness of StateL means mapAccumL has a rewrite rule essentially |
| 22:23:18 | <hololeap> | so you are reading from an infinite stream, threading a random seed through, creating this tree structure along the way, and doing some sort of sliding-window calculation with each new chunk of data that comes in? |
| 22:23:46 | <dartford> | erp, im kind of wanting to not be concerned with the "shape" of the state |
| 22:23:56 | <dartford> | other than to say, it has a lens into the RNG seed |
| 22:24:13 | <dartford> | so never mind about if the carry is a grid or not |
| 22:24:31 | <dartford> | the point is that whatever the carry is, it should have part of it be the seed |
| 22:24:40 | <dartford> | so that the update function can be probablistic |
| 22:24:47 | <dartford> | . |
| 22:25:26 | <hololeap> | that's fine. you can write something that transforms `State RandomSeed a` to `State (RandomSeed, s) a`, generically. that way you can have your functions that only deal with the seed and ignore the rest of the state |
| 22:26:47 | × | MQ-17J quits (~MQ-17J@8.6.144.203) (Ping timeout: 264 seconds) |
| 22:27:05 | <hololeap> | that's what the zoom thing from lens does... it "zooms" into part of a State so that you can think about it in isolation. but, you don't have to use the implementation from lens specifically, you can write it "by hand" as well |
| 22:28:09 | → | proboscis joins (~proboscis@14.137.28.197) |
| 22:30:11 | <dartford> | essentially commuting part of it into the pair and back again, as in a getter and a setter of the van larhoven lens |
| 22:30:17 | <dartford> | yeah "i can lens into the seed" |
| 22:30:21 | <dartford> | being the spec |
| 22:30:33 | <dartford> | i get that this library seems to achieve this |
| 22:30:55 | <dartford> | but i just want to use StateL and Compose, so i preserve the lazyness of its applicative when used with traverse |
| 22:31:00 | <dartford> | you understand this part? |
| 22:31:17 | <dartford> | the lazy compositionality of StateL? |
| 22:31:23 | <dartford> | for the scanner... |
| 22:31:33 | <dartford> | its all about that applicative instance |
| 22:31:41 | <dartford> | to give something like mapAccumL |
| 22:31:49 | → | MQ-17J joins (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
| 22:32:08 | <dartford> | otherwise i dont get my rewrite rule that expresses the algebra |
| 22:32:11 | × | proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 245 seconds) |
| 22:32:51 | <hololeap> | what is StateL? Control.Monad.State.Lazy? |
| 22:33:11 | <dartford> | L for left |
| 22:33:16 | <dartford> | :t mapAccumL |
| 22:33:17 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
| 22:33:26 | <dartford> | no good traversing from the right in an infinite stream! |
| 22:33:37 | <dartford> | so yeah, maybe left and lazy are synonimous in this case |
| 22:33:42 | <dartford> | not sure what module its in, sorry |
| 22:33:59 | <dartford> | oh, its herer |
| 22:34:00 | <dartford> | https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Functor.Utils.html#StateL |
| 22:34:18 | → | son0p- joins (~ff@181.136.122.143) |
| 22:34:32 | <dartford> | right above the all essential applicative instance |
| 22:34:40 | <hololeap> | oh, that's new. I don't have that in my base |
| 22:34:55 | <dartford> | well, you dont need it if you use scanners |
| 22:35:08 | <dartford> | basically you wouldnt be using traverse in the streaming setting |
| 22:35:12 | <dartford> | it would be dangerous to |
| 22:35:33 | <dartford> | should be strictly restricted to using scanners to avoid the pottential for composing with a non-lazy applicative |
| 22:36:07 | <dartford> | but then i guess you couldnt be able to use this compose machinery to get the composed applicative instance |
| 22:36:15 | <hololeap> | the only problem I see is that you probably want this thing to emit some sort of status periodically, right? so you would need it to have access to IO? |
| 22:36:20 | <dartford> | but then, the scanner implementation makes do without that anyway.. |
| 22:36:38 | <dartford> | huh, IO in the monad transformer stack |
| 22:36:40 | <dartford> | yeah |
| 22:36:41 | <dartford> | could be |
| 22:36:57 | <dartford> | but, can be avoided, like, using a carried seed instead of an IO RNG. |
| 22:37:01 | <dartford> | its determanistic then too |
| 22:37:07 | <dartford> | important for reproducability |
| 22:37:08 | → | proboscis joins (~proboscis@14.137.28.197) |
| 22:37:24 | <dartford> | theres a link to a github for the scanners over IOList if you like i can find it |
| 22:37:39 | <dartford> | but really i just want to use a pure infinite list |
| 22:37:47 | <dartford> | to avoid the additional complexity |
| 22:37:54 | <dartford> | and any pottential for runtime errors |
| 22:38:12 | <hololeap> | if it runs indefinitely, you would not have access to any of the output unless it was emitted through IO |
| 22:38:35 | <dartford> | scanner f (repeat ()) |
| 22:38:38 | <dartford> | for example |
| 22:38:47 | <dartford> | clock = repeat () |
| 22:38:56 | <dartford> | in the IO setting you can add a thread delay |
| 22:39:14 | <dartford> | so its more like an actual clock, but the pure versions fine |
| 22:39:30 | <dartford> | oh yeah sure, but main being the only IO |
| 22:39:49 | <dartford> | hmm, your right though, that puts IO into the monad stack |
| 22:40:20 | <dartford> | it ends up like Compose IO (Compose (StateL Int) (whatever the rest of the carry is)) |
| 22:40:46 | <dartford> | it ends up like Compose IO (Compose (StateL Int) (StateL `whatever the rest of the carry is')) |
| 22:41:06 | × | machinedgod quits (~machinedg@24.105.81.50) (Ping timeout: 260 seconds) |
| 22:41:15 | <hololeap> | probably just `Compose (StateL (RandomSeed,s)) IO` |
| 22:41:35 | <dartford> | where you can rewrite that to use just one StateL, i think like Compose IO (StateL (Int,restOfCarry)) |
| 22:41:35 | <hololeap> | and then, yeah you would be restricted to the Applicative instance of IO, but that doesn't sound like it would be a problem |
| 22:42:08 | <hololeap> | because you wouldn't need arbitrary input from IO, just the ability to emit |
| 22:42:13 | <dartford> | yeah it rewrites to what you wrote, but im not sure if the applicative instance is the same |
| 22:42:48 | <dartford> | ahh, ok, i think i understand that consideration, so IO input could mess it up somehow? wouldnt make it not lazy though |
| 22:42:56 | <dartford> | all the lazy streaming works in IO just fine |
| 22:43:02 | <dartford> | well, when its an IO list |
| 22:43:12 | <dartford> | and all the functions acting over it have option for IO too, |
| 22:43:20 | <dartford> | im going to find the gist, hang on |
| 22:43:48 | <hololeap> | this is getting into territory I'm not very familiar with, namely the technical details on laziness, IO, etc, but at least we're getting to the meat of your question |
| 22:43:58 | × | proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 260 seconds) |
| 22:43:59 | <dartford> | this version is tested working https://github.com/fog-hs/streaming-binary-files-take2/tree/master/Stream |
| 22:44:14 | × | pretty_dumm_guy quits (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3) |
| 22:44:24 | <dartford> | hololeap: sorry it took so long |
| 22:44:34 | <dartford> | i was busy |
| 22:44:37 | <dartford> | ... |
| 22:44:38 | <hololeap> | no worries |
| 22:44:59 | <dartford> | try telling her that! |
| 22:45:56 | <dartford> | anyway, its in the public domain now, so i can get hit by a bus safely without it being redacted from reality |
| 22:46:04 | <dartford> | unless you get hit by a bus at the same time |
| 22:46:16 | <dartford> | so we probably need to ride different buses or something |
| 22:46:18 | <hololeap> | what if the whole world gets hit by a bus :o |
| 22:46:21 | × | Gurkenglas quits (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 245 seconds) |
| 22:46:23 | <dartford> | or do more work or road safety |
| 22:46:37 | <dartford> | hololeap: you cant crash a tesla! |
| 22:47:03 | <dartford> | but you can spill drinks on your structured access memory |
| 22:47:30 | <hololeap> | anway, I'm not sure if using the Monad interface for IO would mess up laziness somehow, but I think it's safe to say that restricting the domain to Applicative makes sense in this case |
| 22:47:32 | <dartford> | not that i can remember where i put my drink |
| 22:47:36 | <dartford> | or my glasses! |
| 22:48:26 | <dartford> | https://alchetron.com/cdn/professor-branestawm-3dd7e260-7142-4b63-962a-be473023b6c-resize-750.jpeg |
| 22:48:56 | <dartford> | go on go on go on go on - its got cocain in it! |
| 22:49:09 | × | __monty__ quits (~toonn@user/toonn) (Quit: leaving) |
| 22:49:42 | <dartford> | hololeap: it will be fine, its out of my hands now |
| 22:50:01 | × | fendor quits (~fendor@77.119.160.25.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
| 22:50:14 | <dartford> | thanks for your help - confirming you understand at least dissuades geekosaurs asserion that nobody understands and therefore that i have to explain any more |
| 22:50:56 | <dartford> | aka im satisfied im off the hook, and look forwards to living in a world where more than just me knows my results |
| 22:51:14 | <dartford> | dont worry - im not going to be taking any buses any time soon |
| 22:51:47 | <hololeap> | well, you have to understand that this is a support channel, so the assumption is that there is a specific problem you're trying to solve and you're looking for a concrete answer |
| 22:52:23 | × | zincy_ quits (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
| 22:52:26 | <dartford> | yes, your right, i totally forgot i actually quite need these probabalistic scanners up and running |
| 22:52:32 | <dartford> | damn |
| 22:52:45 | jinsun__ | is now known as jinsun |
| 22:52:58 | <hololeap> | I mean, hook one up to an SDR and you might find something cool... IDK |
| 22:53:12 | × | son0p- quits (~ff@181.136.122.143) (Remote host closed the connection) |
| 22:53:23 | <dartford> | i meant just in terms of the "result" that the crazy composable thing is an applicative stack using compose which preserves lazyness when used with traverse - ie, that its just ensted StateL with an IO in there somewere somehow |
| 22:54:07 | <dartford> | whats an SDR? |
| 22:54:17 | <hololeap> | software defined radio |
| 22:54:23 | × | euandreh quits (~euandreh@2804:14c:33:9fe5:af93:19b0:8b26:3fa2) (Ping timeout: 260 seconds) |
| 22:54:31 | <dartford> | yeah, and aim it at your dog |
| 22:55:04 | <dartford> | its ok, my dog drives a tesla |
| 22:55:19 | <hololeap> | it's a good source for infinite data streams, since it's really just a analogue-digital converter hooked up to an antenna and a tuner |
| 22:56:06 | → | son0p- joins (~ff@181.136.122.143) |
| 22:56:10 | <dartford> | better than hooking it up to the stock market, where there are robots evolved to conduct adversarial privacy preserving system inference and control |
| 22:56:27 | <dartford> | optimally |
| 22:56:42 | <dartford> | "dont use that socket!!!" ... "noooo" |
| 22:57:05 | <dartford> | "hey, whats up with your dog, it cant trade for shit!" |
| 22:57:23 | <dartford> | "its been hacked by trading robots!!!" |
| 22:57:34 | <dartford> | hide your wife... |
| 22:58:16 | <dartford> | taxi! |
| 22:58:20 | × | dartford quits (~dartford@176-157-77-163.abo.bbox.fr) (Quit: Connection closed) |
| 23:01:01 | <Axman6> | good lord, what happened there? |
| 23:01:35 | <Hecate> | I honestly stopped reading |
| 23:01:39 | <Hecate> | how are doing Axman6 btw? |
| 23:02:51 | <Axman6> | It is a beautiful day, I am doing well |
| 23:03:53 | × | burnsidesLlama quits (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
| 23:03:58 | geekosaur | was at one point wondering if what they really wanted was a comonadic structure of some variety |
| 23:04:07 | <geekosaur> | but it was so hard to tell… |
| 23:04:40 | <Rembane_> | I was hoping that they could implement everything just using plain functions but I didn't understand what they wanted. |
| 23:04:59 | awpr | is proud of successfully staying out of it |
| 23:05:15 | <hololeap> | it doesn't sound like there was any concrete problem they were trying to solve, just some vague idea that they wanted us to piece together. |
| 23:05:31 | <awpr> | also couldn't tell what was going on, too much of a terminology barrier and too unfocused |
| 23:05:42 | <hpc> | definitely unfocused |
| 23:05:47 | × | kupi quits (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
| 23:05:55 | <hololeap> | that person has been on here in the past, asking those kinds of super vague super abstract questions, under different names |
| 23:06:10 | <monochrom> | software defined {lens, radio, network, socket} |
| 23:06:22 | <Axman6> | All I saw was a sea of green from one person and decided I didn't want to read it |
| 23:06:40 | <Axman6> | SDS< software defined software |
| 23:06:43 | <Axman6> | ,* |
| 23:06:46 | <monochrom> | What were some of their previous names? |
| 23:06:52 | <hololeap> | fog |
| 23:06:58 | <monochrom> | Oh, that. Bannable. |
| 23:07:00 | <Axman6> | ah yes |
| 23:07:05 | <Axman6> | an apt name |
| 23:07:06 | <hololeap> | that's the only one I remember |
| 23:07:11 | <awpr> | I had a flashback triggered by the github URL |
| 23:07:13 | <hololeap> | lol, yes it is |
| 23:07:21 | <Rembane_> | Dang! Was that fog?! |
| 23:07:26 | <hpc> | yep |
| 23:07:33 | × | DNH quits (~DNH@8.43.122.53) (Quit: Textual IRC Client: www.textualapp.com) |
| 23:07:36 | <Rembane_> | I was so easily fooled! |
| 23:07:53 | <Axman6> | ah HA,you fool! |
| 23:09:04 | <monochrom> | lenses focus, fog unfocuses. That's the definition of unfocused. >:) |
| 23:11:25 | <hololeap> | the arrogant attitude was the cherry on top |
| 23:11:56 | <Rembane_> | So good |
| 23:12:05 | <Rembane_> | Axman6: I am the foolest of fools! |
| 23:13:19 | geekosaur | should have kickbanned at [31 21:50:56] <dartford> and then your like "dude, i cant follow, spoonfeed us" |
| 23:15:02 | <geekosaur> | but I'd said my piece and was working on dinner and only half following at that point |
| 23:15:02 | × | geekosaur quits (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
| 23:15:22 | → | geekosaur joins (~geekosaur@xmonad/geekosaur) |
| 23:16:54 | → | proboscis joins (~proboscis@14.137.28.197) |
| 23:18:02 | × | max22- quits (~maxime@2a01cb0883359800143d8394a75c565e.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
| 23:21:57 | × | takuan quits (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
| 23:23:47 | × | proboscis quits (~proboscis@14.137.28.197) (Ping timeout: 264 seconds) |
| 23:23:47 | × | johnjay quits (~pi@192.142.100.50) (Ping timeout: 264 seconds) |
| 23:25:58 | → | wroathe joins (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
| 23:25:59 | × | wroathe quits (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
| 23:25:59 | → | wroathe joins (~wroathe@user/wroathe) |
| 23:37:34 | → | machinedgod joins (~machinedg@135-23-192-217.cpe.pppoe.ca) |
| 23:43:22 | → | johnjay joins (~pi@192.142.100.50) |
| 23:48:18 | × | mtjm quits (~mutantmel@2604:a880:2:d0::208b:d001) (Remote host closed the connection) |
| 23:48:43 | → | mtjm joins (~mutantmel@2604:a880:2:d0::208b:d001) |
| 23:57:14 | → | proboscis joins (~proboscis@14.137.28.197) |
All times are in UTC on 2021-10-31.