Home liberachat/#haskell: Logs Calendar

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.