2021-10-31 00:00:50 +0200 | chomwitt | (~chomwitt@ppp-94-68-249-8.home.otenet.gr) (Ping timeout: 260 seconds) |
2021-10-31 00:01:23 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-10-31 00:01:51 +0200 | <maerwald> | hmm... I want where-clauses that don't have access to the top-level function arguments |
2021-10-31 00:02:54 +0200 | <geekosaur> | foo = \... where ... ? (hm, probably not) |
2021-10-31 00:03:33 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 276 seconds) |
2021-10-31 00:04:42 +0200 | <energizer> | is it possible to declare a binary operator to be associative? |
2021-10-31 00:06:01 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-10-31 00:06:49 +0200 | <hpc> | what would that mean in practice? |
2021-10-31 00:10:48 +0200 | <energizer> | without associativity, i have to choose foldl or foldr. with it, i can just fold without specifying |
2021-10-31 00:11:04 +0200 | <hololeap> | I'm debugging an build error in gentoo's haskell repo for tasty-discover. it's using v1 cabal stuff to build. when --enable-executable-dynamic configure flag is enabled, I get this when the test suite tries to build: |
2021-10-31 00:11:09 +0200 | <hololeap> | tasty-discover: error while loading shared libraries: libHStasty-discover-4.2.2-EJsJ69ECwwY3j0AkVuZwAF-ghc8.10.6.so: cannot open shared object file: No such file or directory |
2021-10-31 00:11:20 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds) |
2021-10-31 00:12:16 +0200 | Guest27 | (~Guest27@188.64.207.100) (Ping timeout: 256 seconds) |
2021-10-31 00:12:36 +0200 | <energizer> | oh i think i'm looking for Data.Monoid |
2021-10-31 00:14:44 +0200 | <hololeap> | energizer: more specifically, Semigroup |
2021-10-31 00:16:01 +0200 | <hololeap> | although you do need Monoid if you want to use fold from Data.Foldable (since some foldables can be empty) |
2021-10-31 00:16:43 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-10-31 00:17:13 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
2021-10-31 00:18:17 +0200 | <energizer> | how common is it to use things like Data.Monoid? |
2021-10-31 00:18:34 +0200 | <davean> | Does anyone not use them? |
2021-10-31 00:18:43 +0200 | <hololeap> | extremely common/useful |
2021-10-31 00:18:47 +0200 | <energizer> | cool |
2021-10-31 00:19:05 +0200 | <davean> | if you don't use them you're seriously weird |
2021-10-31 00:19:26 +0200 | <hpc> | ^ |
2021-10-31 00:20:31 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
2021-10-31 00:22:41 +0200 | <hololeap> | energizer: it's a good idea to memorize/understand everything in Data.Semigroup/Data.Monoid and use them whenever possible. it will help make your code easier to understand and maintain |
2021-10-31 00:25:09 +0200 | <hpc> | once you understand it, you'll find monoidal structures all over the place |
2021-10-31 00:25:12 +0200 | <hpc> | like Alternative |
2021-10-31 00:25:24 +0200 | <hpc> | and categories |
2021-10-31 00:32:21 +0200 | acidsys | (~LSD@2.lsd.systems) (Quit: I love you.) |
2021-10-31 00:32:53 +0200 | acidsys | (~LSD@2.lsd.systems) |
2021-10-31 00:33:05 +0200 | <maerwald> | doesn't convey much information though |
2021-10-31 00:33:11 +0200 | <maerwald> | I dislike how optparse-applicative uses it |
2021-10-31 00:35:22 +0200 | MQ-17J | (~MQ-17J@8.6.144.203) (Ping timeout: 260 seconds) |
2021-10-31 00:38:30 +0200 | MQ-17J | (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
2021-10-31 00:39:16 +0200 | jess | (~jess@libera/staff/jess) () |
2021-10-31 00:41:02 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Ping timeout: 260 seconds) |
2021-10-31 00:46:02 +0200 | catman | (~catman@user/catman) |
2021-10-31 00:49:11 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
2021-10-31 00:49:49 +0200 | max22- | (~maxime@2a01cb08833598001f901fd4ac72f6bc.ipv6.abo.wanadoo.fr) (Remote host closed the connection) |
2021-10-31 00:51:32 +0200 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) (Quit: This computer has gone to sleep) |
2021-10-31 00:53:08 +0200 | <jackdk> | energizer: I can't even make it to the kitchen without tripping over a monoid. They're an extremely flexible tool, and a great introduction to the "let's port algebraic structures to typeclasses" that you see a lot of in Haskell |
2021-10-31 00:53:56 +0200 | <hpc> | and just to rub it in, algebras themselves have two embedded monoids :D |
2021-10-31 00:54:51 +0200 | son0p | (~ff@181.136.122.143) |
2021-10-31 00:54:52 +0200 | <jackdk> | hpc: do you have a thing I can ready about that? I haven't heard this one |
2021-10-31 00:56:03 +0200 | <hpc> | just wikipedia |
2021-10-31 00:57:44 +0200 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 00:58:01 +0200 | <hpc> | an algebra has a ring, and a ring is basically (+), (*), and the distributive property |
2021-10-31 00:59:10 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c7441135e59462474fdf3062.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-10-31 00:59:26 +0200 | <hpc> | if you've ever thought that boolean algebra looks a lot like real algebra, they're the same abstract structure |
2021-10-31 01:00:02 +0200 | <jackdk> | Gotcha - I remember rings from undergrad. So what are (+) and (*) for algebras? |
2021-10-31 01:01:07 +0200 | <hpc> | they're me not wanting to type a bunch - https://en.wikipedia.org/wiki/Ring_(mathematics)#Definition is nice and concise |
2021-10-31 01:01:38 +0200 | <jackdk> | yep, and then by "algebra" you mean https://en.wikipedia.org/wiki/Algebra_over_a_field ? |
2021-10-31 01:01:42 +0200 | <hpc> | yep |
2021-10-31 01:02:02 +0200 | <hpc> | that whole algebraic structures sidebar is worth reading |
2021-10-31 01:02:02 +0200 | <jackdk> | ty for the pointer, I'll take a look |
2021-10-31 01:05:27 +0200 | CannibisIndica | (~herb@user/mesaboogie) (Ping timeout: 260 seconds) |
2021-10-31 01:06:29 +0200 | <hpc> | if you want a more difficult rabbit hole to jump down after that, try figuring out what real calculus, lambda calculus, relational calculus, and calculus of constructions have in common |
2021-10-31 01:07:56 +0200 | <hpc> | (the answer may or may not be as neat and tidy) |
2021-10-31 01:09:50 +0200 | <jackdk> | stop making me want to quit my day job and go back to uni ;-) |
2021-10-31 01:11:49 +0200 | <hpc> | never! |
2021-10-31 01:12:14 +0200 | dariof4 | (~dariof4@95.131.44.100) (Quit: WeeChat 3.3) |
2021-10-31 01:13:16 +0200 | Null_A | (~null_a@2601:645:8700:2290:19ff:7d99:67c6:79e3) |
2021-10-31 01:14:49 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 01:19:37 +0200 | son0p | (~ff@181.136.122.143) (Remote host closed the connection) |
2021-10-31 01:24:22 +0200 | mmhat | (~mmh@55d4bc38.access.ecotel.net) (Quit: WeeChat 3.3) |
2021-10-31 01:27:22 +0200 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 01:28:10 +0200 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) |
2021-10-31 01:28:53 +0200 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) (Read error: Connection reset by peer) |
2021-10-31 01:29:12 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 01:29:12 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 01:29:12 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 01:39:23 +0200 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 264 seconds) |
2021-10-31 01:43:43 +0200 | xsperry | (~xs@user/xsperry) (Read error: Connection reset by peer) |
2021-10-31 01:44:12 +0200 | CannibisIndica | (~herb@user/mesaboogie) |
2021-10-31 01:44:51 +0200 | CannibisIndica | CannabisIndica |
2021-10-31 01:45:10 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-10-31 01:45:41 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-10-31 01:45:49 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 01:48:50 +0200 | <DigitalKiwi> | contains "calculus" |
2021-10-31 01:50:37 +0200 | machinedgod | (~machinedg@24.105.81.50) |
2021-10-31 01:52:35 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds) |
2021-10-31 01:58:37 +0200 | DNH | (~DNH@8.43.122.53) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-10-31 01:59:54 +0200 | hendursaga | (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
2021-10-31 02:00:13 +0100 | xsperry | (~xs@user/xsperry) |
2021-10-31 02:00:25 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-10-31 02:02:04 +0100 | <hololeap> | what does it mean when `cabal info` has parenthesis around an available version? |
2021-10-31 02:02:24 +0100 | <hololeap> | hnix ... Versions available: ... 0.14.0.1, 0.14.0.2, (0.15.0) |
2021-10-31 02:02:38 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 260 seconds) |
2021-10-31 02:03:13 +0100 | son0p | (~ff@181.136.122.143) |
2021-10-31 02:04:10 +0100 | <geekosaur> | marked as deprecated, according to the hackage page |
2021-10-31 02:04:29 +0100 | <hololeap> | why would the latest version be marked as deprecated? |
2021-10-31 02:05:31 +0100 | <hololeap> | I'm not seeing anything about this being deprecated or being a candidate: https://hackage.haskell.org/package/hnix-0.15.0 |
2021-10-31 02:05:45 +0100 | <geekosaur> | unclear. but I note that hackage's annotations conflate "deprecated" and "one version not preferred" |
2021-10-31 02:05:53 +0100 | <geekosaur> | https://hackage.haskell.org/package/hnix/preferred |
2021-10-31 02:06:41 +0100 | <hololeap> | hm, ok |
2021-10-31 02:09:18 +0100 | <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 |
2021-10-31 02:10:01 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 02:12:24 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) |
2021-10-31 02:13:02 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 02:14:24 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-10-31 02:18:50 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 246 seconds) |
2021-10-31 02:20:41 +0100 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) |
2021-10-31 02:25:00 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Remote host closed the connection) |
2021-10-31 02:29:12 +0100 | guniberas | (~guniberas@42.191.188.121) |
2021-10-31 02:29:46 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2021-10-31 02:30:31 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 02:32:07 +0100 | Skyfire | (~pyon@user/pyon) (Quit: brb) |
2021-10-31 02:32:35 +0100 | Skyfire | (~pyon@user/pyon) |
2021-10-31 02:38:10 +0100 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
2021-10-31 02:38:42 +0100 | Null_A | (~null_a@2601:645:8700:2290:19ff:7d99:67c6:79e3) (Remote host closed the connection) |
2021-10-31 02:41:05 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 02:42:11 +0100 | yaroot | (~yaroot@6.3.30.125.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat) |
2021-10-31 02:42:57 +0100 | yaroot | (~yaroot@6.3.30.125.dy.iij4u.or.jp) |
2021-10-31 02:45:42 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-10-31 02:46:39 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 02:46:39 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 02:46:39 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 02:50:43 +0100 | neightchan | (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) (Quit: WeeChat 2.9) |
2021-10-31 02:50:56 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 245 seconds) |
2021-10-31 02:56:07 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2021-10-31 02:56:48 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 02:57:11 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 02:58:47 +0100 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-10-31 02:58:47 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-10-31 02:58:50 +0100 | allbery_b | geekosaur |
2021-10-31 03:01:07 +0100 | <aegon> | hololeap: oooh, thats perfect |
2021-10-31 03:03:56 +0100 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Remote host closed the connection) |
2021-10-31 03:07:19 +0100 | <cads> | Hey all, I am working with the code listing here: https://gist.github.com/maxsu/62e8aeeb6acff3835240c6bc5a7a9651 |
2021-10-31 03:08:02 +0100 | <cads> | there are a few places where the code is really repetitive and noisy, and I wonder if I can clean that up |
2021-10-31 03:10:11 +0100 | <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 |
2021-10-31 03:10:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 03:10:25 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 03:10:25 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 03:13:43 +0100 | <cads> | can I create an alternative constructor for Category that would let me write: |
2021-10-31 03:14:05 +0100 | <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') |
2021-10-31 03:14:28 +0100 | euouae | (~euouae@user/euouae) |
2021-10-31 03:14:30 +0100 | <euouae> | Hello |
2021-10-31 03:14:33 +0100 | <hololeap> | isn't a category a Profunctor? |
2021-10-31 03:15:57 +0100 | <cads> | hololeap, how do you figure? |
2021-10-31 03:16:31 +0100 | <hololeap> | it's contravariant in `a` and covariant in `b` |
2021-10-31 03:16:55 +0100 | <euouae> | I think profunctors are special kinds of categories |
2021-10-31 03:17:05 +0100 | <hololeap> | other way around |
2021-10-31 03:17:20 +0100 | <hololeap> | categories are profunctors that associate under composition |
2021-10-31 03:17:34 +0100 | <euouae> | in that case, it goes both ways hololeap |
2021-10-31 03:17:51 +0100 | <euouae> | e.g. https://en.wikipedia.org/wiki/Profunctor#Profunctors_as_categories explains how to view profunctors as categories |
2021-10-31 03:18:34 +0100 | <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 |
2021-10-31 03:19:39 +0100 | <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 |
2021-10-31 03:20:21 +0100 | <hololeap> | that sounds like something that could be done with linear types, perhaps? |
2021-10-31 03:20:55 +0100 | <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 |
2021-10-31 03:21:46 +0100 | <hololeap> | it honestly sounds like something rust would do better |
2021-10-31 03:21:56 +0100 | <hololeap> | haskell has that pesky garbage collector |
2021-10-31 03:22:00 +0100 | <cads> | bit of a throwback, but might be a useful lead: http://code.ouroborus.net/fp-syd/past/2011/2011-05-sewell-l4v.pdf |
2021-10-31 03:22:44 +0100 | <euouae> | Hmm I don't know if Rust can guarantee this hololeap, but I don't know much Rust either |
2021-10-31 03:23:11 +0100 | <euouae> | I also don't know what linare types are |
2021-10-31 03:23:58 +0100 | <euouae> | aah you're speaking of argument consumption |
2021-10-31 03:24:57 +0100 | <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 |
2021-10-31 03:25:08 +0100 | <hololeap> | that sounds like exactly what linear types do |
2021-10-31 03:25:27 +0100 | <euouae> | Yeah you're right, I agree it is a good solution |
2021-10-31 03:26:11 +0100 | alx741 | (~alx741@181.196.69.253) (Quit: alx741) |
2021-10-31 03:27:16 +0100 | betelgeuse | (~betelgeus@94-225-47-8.access.telenet.be) (Quit: The Lounge - https://thelounge.chat) |
2021-10-31 03:28:17 +0100 | <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 |
2021-10-31 03:30:48 +0100 | <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 |
2021-10-31 03:31:13 +0100 | <euouae> | cads, what of something a bit simpler, like a TLS library? |
2021-10-31 03:32:08 +0100 | <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. |
2021-10-31 03:33:35 +0100 | <euouae> | although that doesn't sound right. I'm not sure. |
2021-10-31 03:34:13 +0100 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-10-31 03:35:35 +0100 | img | (~img@user/img) |
2021-10-31 03:38:37 +0100 | <euouae> | I also know of Ivory https://ivorylang.org/ but it's only a subset of C |
2021-10-31 03:39:04 +0100 | <euouae> | cads so for example I think it's reasonable to use ivory to write certain algorithms in it |
2021-10-31 03:41:47 +0100 | catman | (~catman@user/catman) |
2021-10-31 03:42:19 +0100 | <euouae> | Another great feature in Haskell that helps with security that C doesn't have is `hedgehog` or similar unit test libraries |
2021-10-31 03:43:15 +0100 | <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... |
2021-10-31 03:43:48 +0100 | <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 |
2021-10-31 03:44:40 +0100 | <cads> | they then manually wrote a C implementation and manually proved that it conforms to the exectutable spec |
2021-10-31 03:44:51 +0100 | <euouae> | I'm not sure about that manual proof cads |
2021-10-31 03:44:54 +0100 | <euouae> | I don't understand how that worked |
2021-10-31 03:45:18 +0100 | [_] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-10-31 03:47:11 +0100 | <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 |
2021-10-31 03:47:54 +0100 | <euouae> | OK got it. There must have been some proof by argument too, I don't think it was all automated |
2021-10-31 03:48:05 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 264 seconds) |
2021-10-31 03:48:48 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 03:49:39 +0100 | <sm> | euouae: C has fuzz testing tools |
2021-10-31 03:49:52 +0100 | <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. |
2021-10-31 03:50:32 +0100 | <cads> | euouae, second, we prove that each piece of C-code correctly implements its executable specification |
2021-10-31 03:50:35 +0100 | <euouae> | That first part makes sense cads, I'm following. The abstract spec is something like Z-language |
2021-10-31 03:50:39 +0100 | <cads> | two huge acts of HOL proof bashing |
2021-10-31 03:51:28 +0100 | <euouae> | OK got you. Even /that/ sounds great to me for my purpose. How about secure Haskell then? |
2021-10-31 03:51:37 +0100 | <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 |
2021-10-31 03:51:44 +0100 | <euouae> | Of course Haskell is generally secure, but for instance, a dangling password variable in memory is insecure. That's an example |
2021-10-31 03:51:57 +0100 | <euouae> | cads, you were involved? |
2021-10-31 03:52:07 +0100 | <cads> | nah, I'm just a fanboi |
2021-10-31 03:52:35 +0100 | hendursaga | (~weechat@user/hendursaga) (Quit: hendursaga) |
2021-10-31 03:52:36 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 245 seconds) |
2021-10-31 03:52:41 +0100 | <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 |
2021-10-31 03:53:05 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-10-31 03:53:11 +0100 | xff0x | (~xff0x@2001:1a81:52f0:9300:c38e:4fda:aa4c:3e21) (Ping timeout: 264 seconds) |
2021-10-31 03:54:07 +0100 | <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... |
2021-10-31 03:54:19 +0100 | proboscis | (~proboscis@115-189-81-94.mobile.spark.co.nz) |
2021-10-31 03:54:45 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:7f1d:617d:8156:7d35) |
2021-10-31 03:55:27 +0100 | <cads> | and we do that by auto-translating haskell to a messy "exec-spec", and formally linking that back to the abstract spec |
2021-10-31 03:56:01 +0100 | <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 |
2021-10-31 03:56:22 +0100 | <euouae> | it would be nice if it were caught automatically instead of someone noticing "oops, 100 commits ago the specs diverged" |
2021-10-31 03:56:47 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 264 seconds) |
2021-10-31 03:57:22 +0100 | <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 |
2021-10-31 03:59:09 +0100 | <euouae> | It's annoying that I feel like getting sucked in some sort of black hole |
2021-10-31 04:00:07 +0100 | <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 |
2021-10-31 04:00:16 +0100 | <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 |
2021-10-31 04:01:17 +0100 | <euouae> | cads oh yeah, that's also a black hole :P |
2021-10-31 04:02:04 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 04:02:26 +0100 | trillp | (~trillp@69.233.98.238) (Quit: nyaa~) |
2021-10-31 04:03:38 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) (Ping timeout: 268 seconds) |
2021-10-31 04:05:29 +0100 | <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 |
2021-10-31 04:05:51 +0100 | <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) |
2021-10-31 04:07:10 +0100 | <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 |
2021-10-31 04:07:32 +0100 | <euouae> | OK actually that sounds good enough to me cads |
2021-10-31 04:08:39 +0100 | <euouae> | hmm I don't know anything about HOLs |
2021-10-31 04:09:14 +0100 | <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 |
2021-10-31 04:11:46 +0100 | <aegon> | man, Debug.Trace is fantastic for pretending you don't need tests :P |
2021-10-31 04:13:47 +0100 | <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 |
2021-10-31 04:15:06 +0100 | td_ | (~td@muedsl-82-207-238-113.citykom.de) (Ping timeout: 245 seconds) |
2021-10-31 04:17:47 +0100 | <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... |
2021-10-31 04:17:53 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 04:17:58 +0100 | <aegon> | now i'm not sure whats a bug or whats odd stuff i put in there to try to find bugs :\ |
2021-10-31 04:18:19 +0100 | <aegon> | and its already mostly manually tested, so why go back to unit test it now right? :D |
2021-10-31 04:19:07 +0100 | <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 |
2021-10-31 04:19:11 +0100 | <aegon> | *places |
2021-10-31 04:20:27 +0100 | <aegon> | you'd need some sort of valgrind like setup watching the bits |
2021-10-31 04:21:10 +0100 | <aegon> | actually, does valgrind not already have the ability to point at funcitons used etc? |
2021-10-31 04:21:13 +0100 | aegon | runs to the docs |
2021-10-31 04:21:17 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 04:22:02 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-10-31 04:24:38 +0100 | <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. |
2021-10-31 04:24:44 +0100 | <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 |
2021-10-31 04:26:51 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-10-31 04:29:07 +0100 | emf | (~emf@2620:10d:c090:400::5:9927) |
2021-10-31 04:30:19 +0100 | emf | (~emf@2620:10d:c090:400::5:9927) (Client Quit) |
2021-10-31 04:32:36 +0100 | <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 |
2021-10-31 04:33:37 +0100 | <aegon> | cads: what do you mean by a transformer in that context? |
2021-10-31 04:36:32 +0100 | <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. |
2021-10-31 04:36:43 +0100 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-10-31 04:37:24 +0100 | <euouae> | cads how? |
2021-10-31 04:37:45 +0100 | <euouae> | do they do something insane like look at the waveform in a basis and decide what the new coefficients are? |
2021-10-31 04:38:12 +0100 | <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 |
2021-10-31 04:38:17 +0100 | <aegon> | cads: interesting, yeah i've worked with em a little in doing some automatic music transcription |
2021-10-31 04:38:22 +0100 | viluon | (uid453725@id-453725.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2021-10-31 04:38:45 +0100 | <aegon> | i've never thought of using them on byte code or anthing or heard of them goign into code implementations |
2021-10-31 04:38:56 +0100 | <aegon> | is that how githubs copilot stuff is working? |
2021-10-31 04:39:45 +0100 | <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 |
2021-10-31 04:40:53 +0100 | <cads> | Copilot is powered by OpenAI's Codex, which is a code-trained version of the openAI GPT3 language transformer |
2021-10-31 04:41:38 +0100 | <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 |
2021-10-31 04:41:51 +0100 | <cads> | let alone something as complex as code |
2021-10-31 04:42:51 +0100 | <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 |
2021-10-31 04:43:53 +0100 | <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. |
2021-10-31 04:45:31 +0100 | <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" |
2021-10-31 04:45:46 +0100 | [_] | [itchyjunk] |
2021-10-31 04:46:57 +0100 | <cads> | Hey all, is there any writing about how to clean up messy typeclasses? |
2021-10-31 04:47:11 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 264 seconds) |
2021-10-31 04:47:11 +0100 | <cads> | this looks like an example: http://h2.jaguarpaw.co.uk/posts/simplifying-typeclasses/ |
2021-10-31 04:48:59 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-10-31 04:50:04 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 04:55:38 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 05:06:24 +0100 | <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 |
2021-10-31 05:10:56 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-10-31 05:15:54 +0100 | natechan | (~nate@108-233-125-227.lightspeed.sntcca.sbcglobal.net) |
2021-10-31 05:18:18 +0100 | euouae | (~euouae@user/euouae) (Quit: thank you for the help) |
2021-10-31 05:22:36 +0100 | boxscape_ | (~boxscape_@i577BCB53.versanet.de) (Ping timeout: 245 seconds) |
2021-10-31 05:23:22 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 05:26:08 +0100 | mbuf | (~Shakthi@171.61.246.251) |
2021-10-31 05:29:29 +0100 | mikoto-chan | (~mikoto-ch@185.237.102.118) |
2021-10-31 05:30:41 +0100 | <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. |
2021-10-31 05:32:57 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
2021-10-31 05:37:51 +0100 | zebrag | (~chris@user/zebrag) (Remote host closed the connection) |
2021-10-31 05:38:01 +0100 | Guest19 | (~Guest19@2600:1700:31c0:3a10:81e2:cfe0:2015:d55b) |
2021-10-31 05:41:11 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 264 seconds) |
2021-10-31 05:42:10 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2021-10-31 05:43:20 +0100 | <monochrom> | ScopedTypeVariables |
2021-10-31 05:45:19 +0100 | <dsal> | Oh weird. I thought that was on and/or implied. heh |
2021-10-31 05:45:40 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 05:47:03 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 05:47:03 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 05:47:03 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 05:48:13 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2021-10-31 05:50:02 +0100 | mvk | (~mvk@2607:fea8:5cc1:300::d3fb) |
2021-10-31 05:53:00 +0100 | Skyfire | (~pyon@user/pyon) (Quit: brb broken config) |
2021-10-31 05:53:21 +0100 | Skyfire | (~pyon@user/pyon) |
2021-10-31 05:57:08 +0100 | ghoulguy | (x@libera/staff/glguy) (Quit: Quit) |
2021-10-31 05:58:17 +0100 | glguy | (x@libera/staff/glguy) |
2021-10-31 05:58:43 +0100 | glguy | ghoulguy |
2021-10-31 06:01:02 +0100 | Guest19 | (~Guest19@2600:1700:31c0:3a10:81e2:cfe0:2015:d55b) (Quit: Client closed) |
2021-10-31 06:11:48 +0100 | <cads> | aegon, I haven't used it, but I might try to port a pytorch project for fun soon |
2021-10-31 06:34:04 +0100 | manicennui | (uid349235@id-349235.tinside.irccloud.com) (Quit: Keep firing, assholes!) |
2021-10-31 06:45:24 +0100 | boxscape_ | (~boxscape_@mue-88-130-59-084.dsl.tropolys.de) |
2021-10-31 06:48:51 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 245 seconds) |
2021-10-31 06:50:28 +0100 | <brainfreeze> | Why do instance declarations always seem to be missing a type variable? It almost seems like it's currying the type variables. |
2021-10-31 06:51:06 +0100 | <c_wraith> | type constructors are curried, yes |
2021-10-31 06:51:22 +0100 | <c_wraith> | and instances have to have the right kind |
2021-10-31 06:51:35 +0100 | <c_wraith> | If that means not fully applying type arguments, so be it |
2021-10-31 06:56:06 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-10-31 06:57:44 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2021-10-31 06:59:30 +0100 | haritz | (~hrtz@62.3.70.206) |
2021-10-31 06:59:30 +0100 | haritz | (~hrtz@62.3.70.206) (Changing host) |
2021-10-31 06:59:30 +0100 | haritz | (~hrtz@user/haritz) |
2021-10-31 07:02:11 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) (Quit: Connection closed for inactivity) |
2021-10-31 07:03:45 +0100 | mei | (~mei@user/mei) |
2021-10-31 07:05:17 +0100 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-10-31 07:06:22 +0100 | <brainfreeze> | Is there a formal name for what I mentioned? |
2021-10-31 07:09:15 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2021-10-31 07:10:07 +0100 | img | (~img@user/img) |
2021-10-31 07:11:12 +0100 | haritz | (~hrtz@user/haritz) (Quit: ZNC 1.7.2+deb3 - https://znc.in) |
2021-10-31 07:14:22 +0100 | haritz | (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) |
2021-10-31 07:14:22 +0100 | haritz | (~hrtz@2a02:8010:65b5:0:6009:6384:e3cb:2220) (Changing host) |
2021-10-31 07:14:22 +0100 | haritz | (~hrtz@user/haritz) |
2021-10-31 07:23:51 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 245 seconds) |
2021-10-31 07:24:37 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2021-10-31 07:26:48 +0100 | vicfred | (~vicfred@user/vicfred) (Quit: Leaving) |
2021-10-31 07:31:54 +0100 | fvr | (uid503686@id-503686.uxbridge.irccloud.com) |
2021-10-31 07:38:57 +0100 | proboscis | (~proboscis@115-189-81-94.mobile.spark.co.nz) (Read error: Connection reset by peer) |
2021-10-31 07:40:04 +0100 | proboscis | (~proboscis@115-189-81-94.mobile.spark.co.nz) |
2021-10-31 07:40:45 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 07:40:45 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 07:40:45 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 07:45:50 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2021-10-31 07:50:59 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) |
2021-10-31 07:53:40 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Remote host closed the connection) |
2021-10-31 07:54:38 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2021-10-31 07:56:52 +0100 | chomwitt | (~chomwitt@ppp-2-85-245-90.home.otenet.gr) |
2021-10-31 07:57:44 +0100 | ikke | (~kevin@alpine/developer/ikke) (Quit: WeeChat 3.2) |
2021-10-31 07:57:59 +0100 | ikke | (~kevin@alpine/developer/ikke) |
2021-10-31 08:01:45 +0100 | aegon | (~mike@174.127.249.180) (Quit: leaving) |
2021-10-31 08:08:02 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-10-31 08:11:40 +0100 | img_ | (~img@user/img) |
2021-10-31 08:11:40 +0100 | MQ-17J | (~MQ-17J@d192-24-122-179.try.wideopenwest.com) (Read error: Connection reset by peer) |
2021-10-31 08:14:47 +0100 | img | (~img@user/img) (Ping timeout: 264 seconds) |
2021-10-31 08:16:32 +0100 | fizzsegfaultbuzz | (~segfaultf@135-180-0-138.static.sonic.net) (Ping timeout: 265 seconds) |
2021-10-31 08:16:51 +0100 | MQ-17J | (~MQ-17J@8.6.144.203) |
2021-10-31 08:20:47 +0100 | mvk | (~mvk@2607:fea8:5cc1:300::d3fb) (Ping timeout: 264 seconds) |
2021-10-31 08:21:33 +0100 | brainfreeze | (~brainfree@2a03:1b20:4:f011::20d) (Remote host closed the connection) |
2021-10-31 08:23:05 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-10-31 08:24:26 +0100 | chexum | (~quassel@gateway/tor-sasl/chexum) |
2021-10-31 08:24:30 +0100 | chexum_ | (~quassel@gateway/tor-sasl/chexum) (Ping timeout: 276 seconds) |
2021-10-31 08:29:04 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-10-31 08:30:15 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) |
2021-10-31 08:30:16 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) (Quit: zzz) |
2021-10-31 08:46:34 +0100 | img_ | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-10-31 08:54:02 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
2021-10-31 08:55:27 +0100 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-10-31 08:56:52 +0100 | chomwitt | (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Read error: Connection reset by peer) |
2021-10-31 08:57:03 +0100 | img | (~img@user/img) |
2021-10-31 08:57:07 +0100 | chomwitt | (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) |
2021-10-31 08:58:35 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 264 seconds) |
2021-10-31 09:05:27 +0100 | hendursa1 | (~weechat@user/hendursaga) |
2021-10-31 09:08:01 +0100 | aliosablack | (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) |
2021-10-31 09:08:29 +0100 | chomwitt | (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Read error: Connection reset by peer) |
2021-10-31 09:09:19 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 09:09:21 +0100 | hendursaga | (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
2021-10-31 09:13:15 +0100 | notzmv | (~zmv@user/notzmv) (Ping timeout: 260 seconds) |
2021-10-31 09:17:03 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
2021-10-31 09:22:04 +0100 | acidjnk_new3 | (~acidjnk@p200300d0c7441135e59462474fdf3062.dip0.t-ipconnect.de) |
2021-10-31 09:22:48 +0100 | <Franciman> | tik tok tik tok, the time is running out. be prepared |
2021-10-31 09:26:14 +0100 | Farzad | (~FarzadBek@178.131.30.143) |
2021-10-31 09:32:02 +0100 | fendor | (~fendor@178.115.79.50.wireless.dyn.drei.com) |
2021-10-31 09:39:40 +0100 | mikoto-chan | (~mikoto-ch@185.237.102.118) (Read error: Connection reset by peer) |
2021-10-31 09:40:36 +0100 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-10-31 09:41:12 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) (Ping timeout: 276 seconds) |
2021-10-31 09:43:22 +0100 | azimut | (~azimut@gateway/tor-sasl/azimut) |
2021-10-31 09:43:51 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-10-31 09:44:11 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-10-31 09:45:31 +0100 | boxscape_ | (~boxscape_@mue-88-130-59-084.dsl.tropolys.de) (Ping timeout: 245 seconds) |
2021-10-31 09:50:40 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Read error: Connection reset by peer) |
2021-10-31 09:51:57 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
2021-10-31 09:56:10 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-10-31 09:58:14 +0100 | c0c0 | (~coco@85.195.206.193) |
2021-10-31 09:58:40 +0100 | c0c0 | (~coco@85.195.206.193) (Client Quit) |
2021-10-31 09:58:49 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2021-10-31 09:59:11 +0100 | guniberas | (~guniberas@42.191.188.121) (Ping timeout: 264 seconds) |
2021-10-31 10:00:06 +0100 | tsmc[m] | (~tsmcmatri@2001:470:69fc:105::1:7e1) (Quit: You have been kicked for being idle) |
2021-10-31 10:00:08 +0100 | sam[m]12 | (~sammtopoi@2001:470:69fc:105::e887) (Quit: You have been kicked for being idle) |
2021-10-31 10:03:34 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds) |
2021-10-31 10:05:16 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-10-31 10:05:31 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-10-31 10:07:57 +0100 | <[exa]> | Franciman: what's the deal? |
2021-10-31 10:14:56 +0100 | acidjnk_new3 | (~acidjnk@p200300d0c7441135e59462474fdf3062.dip0.t-ipconnect.de) (Read error: Connection reset by peer) |
2021-10-31 10:15:34 +0100 | <cads> | Is halloween, am feeling spooky. https://gist.github.com/maxsu/65ee89f6306fe2e62c5e8e519b635399 Happy halloween! |
2021-10-31 10:20:46 +0100 | acidjnk | (~acidjnk@p200300d0c7441135e0a3c48788e32464.dip0.t-ipconnect.de) |
2021-10-31 10:20:55 +0100 | <Rembane_> | Very spooky! |
2021-10-31 10:21:04 +0100 | kenran | (~kenran@200116b82b0d0a00e98487ecbf918c70.dip.versatel-1u1.de) |
2021-10-31 10:21:40 +0100 | <cads> | I'm trying to get at least some of the ghosts out of it, lol |
2021-10-31 10:23:26 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 245 seconds) |
2021-10-31 10:29:45 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-10-31 10:39:38 +0100 | img | (~img@user/img) (Quit: ZNC 1.8.2 - https://znc.in) |
2021-10-31 10:41:00 +0100 | img | (~img@user/img) |
2021-10-31 10:45:13 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 10:46:29 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 10:50:11 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 264 seconds) |
2021-10-31 10:51:06 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-10-31 10:53:27 +0100 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) |
2021-10-31 10:55:55 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
2021-10-31 10:57:47 +0100 | zaquest | (~notzaques@5.128.210.178) (Remote host closed the connection) |
2021-10-31 10:57:52 +0100 | aliosablack | (~chomwitt@2a02:587:dc02:9f00:12c3:7bff:fe6d:d374) (Ping timeout: 260 seconds) |
2021-10-31 10:58:50 +0100 | zaquest | (~notzaques@5.128.210.178) |
2021-10-31 11:00:23 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 265 seconds) |
2021-10-31 11:05:26 +0100 | <maerwald> | Haskell is mentioned wrt "significant whitespace" in the "Worst Programming Language Ever" talk: https://www.youtube.com/watch?v=2mnYf7L7Amw |
2021-10-31 11:14:47 +0100 | img | (~img@user/img) (Ping timeout: 264 seconds) |
2021-10-31 11:14:48 +0100 | <Rembane_> | Can't Haskell be written without significant whitespace? |
2021-10-31 11:15:22 +0100 | mmhat | (~mmh@55d4be88.access.ecotel.net) |
2021-10-31 11:16:10 +0100 | <maerwald> | the point is that changing whitespaces to tabs can make your program not compile |
2021-10-31 11:16:25 +0100 | <maerwald> | or not following alignment rules in general |
2021-10-31 11:17:21 +0100 | Vq | (half-jokingly) regards bad indentation in C worse than behavioural bugs |
2021-10-31 11:17:45 +0100 | <Rembane_> | maerwald: Got it. I'm too used to Python and Haskell to see this as a problem. |
2021-10-31 11:18:02 +0100 | <Cale> | Replacing whitespace with vertical tabs also can make your program not compile in many languages, but nobody cares |
2021-10-31 11:18:18 +0100 | <Rembane_> | What's a vertical tab and how is it rendered? |
2021-10-31 11:18:21 +0100 | <Rembane_> | I've never seen one. |
2021-10-31 11:18:55 +0100 | <Cale> | It's an ancient character that was used to speed up vertical movement on printers |
2021-10-31 11:19:01 +0100 | <maerwald> | :D |
2021-10-31 11:19:08 +0100 | <Cale> | But it's still there as a form of whitespace |
2021-10-31 11:19:34 +0100 | <maerwald> | the only time I printed out my code was to troll a professor |
2021-10-31 11:19:44 +0100 | <Vq> | I don't see page-feed characters that often anymore, I wonder what languages accepts them... |
2021-10-31 11:21:08 +0100 | <Rembane_> | Cale: Cool, doesn't sound too useful on a monitor but I can see why it was useful back in the day. |
2021-10-31 11:21:18 +0100 | <maerwald> | and when you don't match the whitespaces in python, the error you get is "couldn't match colon" |
2021-10-31 11:21:37 +0100 | <Rembane_> | I am not going to make an inappropriate joke about that. |
2021-10-31 11:21:38 +0100 | <maerwald> | but I guess it would be kinda hard for the compiler figuring out what you meant |
2021-10-31 11:22:18 +0100 | <maerwald> | it could try brute-force compilation |
2021-10-31 11:22:52 +0100 | <Rembane_> | maerwald: Try all possible indentations and see what kinda makes sense? |
2021-10-31 11:23:16 +0100 | <maerwald> | "compiles" |
2021-10-31 11:23:21 +0100 | <maerwald> | "makes sense" is something else |
2021-10-31 11:24:20 +0100 | <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. |
2021-10-31 11:24:29 +0100 | notzmv | (~zmv@user/notzmv) |
2021-10-31 11:25:04 +0100 | <Rembane_> | maerwald: That's my point, it would be very easy to get "interesting" semantics from that. :) |
2021-10-31 11:25:14 +0100 | <Rembane_> | I like to have the tab key but not the tab character. |
2021-10-31 11:29:22 +0100 | kenran | (~kenran@200116b82b0d0a00e98487ecbf918c70.dip.versatel-1u1.de) (Ping timeout: 260 seconds) |
2021-10-31 11:29:38 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 11:30:19 +0100 | kenran | (~kenran@200116b82b0d0a0094e57a89e1053ea4.dip.versatel-1u1.de) |
2021-10-31 11:33:37 +0100 | kenran | (~kenran@200116b82b0d0a0094e57a89e1053ea4.dip.versatel-1u1.de) (Client Quit) |
2021-10-31 11:35:29 +0100 | <maerwald> | it's a great talk... he put all his sincere hatred and made something funny out of it |
2021-10-31 11:35:44 +0100 | <maerwald> | and I can feel there's years of pain behind it |
2021-10-31 11:37:00 +0100 | <maerwald> | the only conditional operator being `unless` is a great idea |
2021-10-31 11:38:51 +0100 | <maerwald> | I must admit I can't stand that function in haskell either (especially when hlint suggests it to me) |
2021-10-31 11:39:44 +0100 | <maerwald> | just because in my head `when (not ...)` sounds much more plausible |
2021-10-31 11:39:50 +0100 | mmhat | (~mmh@55d4be88.access.ecotel.net) (Quit: WeeChat 3.3) |
2021-10-31 11:42:54 +0100 | f-a | (f2a@f2a.jujube.ircnow.org) () |
2021-10-31 11:45:54 +0100 | mmhat | (~mmh@55d4be88.access.ecotel.net) |
2021-10-31 11:49:26 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:7f1d:617d:8156:7d35) (Ping timeout: 260 seconds) |
2021-10-31 11:49:55 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) |
2021-10-31 11:54:23 +0100 | mmhat | (~mmh@55d4be88.access.ecotel.net) (Quit: WeeChat 3.3) |
2021-10-31 11:55:15 +0100 | mmhat | (~mmh@55d4be88.access.ecotel.net) |
2021-10-31 12:00:53 +0100 | alx741 | (~alx741@181.196.69.253) |
2021-10-31 12:07:51 +0100 | Guest31 | (~Guest31@eth-west-pareq2-46-193-4-100.wb.wifirst.net) |
2021-10-31 12:09:02 +0100 | chomwitt | (~chomwitt@ppp-2-85-245-90.home.otenet.gr) |
2021-10-31 12:14:29 +0100 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) |
2021-10-31 12:16:20 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 12:21:23 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 264 seconds) |
2021-10-31 12:23:45 +0100 | DNH | (~DNH@8.43.122.53) |
2021-10-31 12:26:44 +0100 | __monty__ | (~toonn@user/toonn) |
2021-10-31 12:37:31 +0100 | Lycurgus | (~juan@98.4.112.204) |
2021-10-31 12:40:13 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) |
2021-10-31 12:41:56 +0100 | <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. |
2021-10-31 12:42:51 +0100 | <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. |
2021-10-31 12:43:01 +0100 | <tomjaguarpaw> | I have to add at least import qualified Foo(field) |
2021-10-31 12:43:10 +0100 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2021-10-31 12:43:32 +0100 | <tomjaguarpaw> | Why does it care that field is in scope? Doesn't the HasField instance do all that is required? |
2021-10-31 12:50:31 +0100 | hippoid | (~idris@184.105.6.88) (Ping timeout: 245 seconds) |
2021-10-31 12:51:28 +0100 | hippoid | (~idris@184.105.6.88) |
2021-10-31 12:54:39 +0100 | Liudvikas | (~Liudvikas@88.222.185.135) |
2021-10-31 12:54:56 +0100 | <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? |
2021-10-31 12:54:58 +0100 | jakalx | (~jakalx@base.jakalx.net) |
2021-10-31 12:55:14 +0100 | acidjnk | (~acidjnk@p200300d0c7441135e0a3c48788e32464.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-10-31 12:57:13 +0100 | Farzad | (~FarzadBek@178.131.30.143) (Quit: Leaving) |
2021-10-31 13:00:35 +0100 | cheater | (~Username@user/cheater) (Ping timeout: 246 seconds) |
2021-10-31 13:01:11 +0100 | cheater | (~Username@user/cheater) |
2021-10-31 13:03:46 +0100 | <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. |
2021-10-31 13:05:17 +0100 | <amesgen[m]> | See https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0023-overloaded-record-fields… |
2021-10-31 13:06:17 +0100 | <tomjaguarpaw> | amesgen[m]: Thanks |
2021-10-31 13:07:49 +0100 | xsperry | (~xs@user/xsperry) () |
2021-10-31 13:11:49 +0100 | Lycurgus | (~juan@98.4.112.204) (Quit: Exeunt) |
2021-10-31 13:12:26 +0100 | <zincy> | Does using a tuple make sense over a fixed list when you know ahead of time exactly what you need? |
2021-10-31 13:13:17 +0100 | <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 |
2021-10-31 13:13:17 +0100 | <geekosaur> | it can. but if you need list operations, you lose those with a tuple |
2021-10-31 13:13:40 +0100 | <zincy> | Convert to list? Maybe this is slow hmm |
2021-10-31 13:13:58 +0100 | <geekosaur> | in particular with that case you would need to manually build the N+1-tuple |
2021-10-31 13:14:10 +0100 | <geekosaur> | which means it won't generalize well for different Ns |
2021-10-31 13:14:46 +0100 | <zincy> | Yeah generalisation wont be needed most probably |
2021-10-31 13:21:54 +0100 | Liudvikas | (~Liudvikas@88.222.185.135) (Ping timeout: 260 seconds) |
2021-10-31 13:23:13 +0100 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-10-31 13:29:59 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) (Ping timeout: 246 seconds) |
2021-10-31 13:32:05 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-10-31 13:32:06 +0100 | [_] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-10-31 13:32:34 +0100 | proboscis | (~proboscis@115-189-81-94.mobile.spark.co.nz) (Ping timeout: 260 seconds) |
2021-10-31 13:35:23 +0100 | yin | (~z@user/zero) |
2021-10-31 13:36:07 +0100 | [_] | (~itchyjunk@user/itchyjunk/x-7353470) (Client Quit) |
2021-10-31 13:37:38 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-10-31 13:38:05 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 13:40:38 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) |
2021-10-31 13:41:47 +0100 | proboscis | (~proboscis@115-189-83-206.mobile.spark.co.nz) |
2021-10-31 13:42:50 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
2021-10-31 13:44:59 +0100 | <yin> | sortOn is defined as `map snd . sortBy (comparing fst) . map (\x -> let y = f x in seq y (y,x))` |
2021-10-31 13:45:41 +0100 | <yin> | this is referred to as a Schwartzian transform |
2021-10-31 13:46:09 +0100 | <yin> | the advantage beying that it only evaluates f once for each element |
2021-10-31 13:46:17 +0100 | <yin> | s/beying/being |
2021-10-31 13:47:07 +0100 | <yin> | my question is, can the compiler optimize sortBy . comparing to this? |
2021-10-31 13:47:28 +0100 | thblt | (~thblt@user/thblt) (ERC (IRC client for Emacs 28.0.50)) |
2021-10-31 13:53:48 +0100 | max22- | (~maxime@lfbn-ren-1-762-224.w81-53.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
2021-10-31 13:54:54 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 13:56:41 +0100 | xsperry | (~xs@user/xsperry) |
2021-10-31 13:57:06 +0100 | Liudvikas | (~Liudvikas@88.222.185.135) |
2021-10-31 13:58:24 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
2021-10-31 14:02:36 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 245 seconds) |
2021-10-31 14:02:52 +0100 | <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) |
2021-10-31 14:03:30 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
2021-10-31 14:10:20 +0100 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
2021-10-31 14:11:17 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Read error: Connection reset by peer) |
2021-10-31 14:12:00 +0100 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) (Quit: Leaving) |
2021-10-31 14:13:20 +0100 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) |
2021-10-31 14:16:48 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-10-31 14:20:25 +0100 | Liudvikas | (~Liudvikas@88.222.185.135) (Quit: Konversation terminated!) |
2021-10-31 14:21:00 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-10-31 14:21:58 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-10-31 14:22:31 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-10-31 14:22:54 +0100 | <hippoid> | :t repeat (:) |
2021-10-31 14:22:55 +0100 | <lambdabot> | [a -> [a] -> [a]] |
2021-10-31 14:23:11 +0100 | <hippoid> | I'm stuck on how repeat can accept (:) as an argument |
2021-10-31 14:23:27 +0100 | <hippoid> | my brain hasn't grokked how the types can unify |
2021-10-31 14:24:36 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-10-31 14:25:12 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 14:26:35 +0100 | <Hecate> | % :t repeat |
2021-10-31 14:26:35 +0100 | <yahb> | Hecate: a -> [a] |
2021-10-31 14:26:37 +0100 | <xsperry> | it just creates a list of (:) functions.. ie [(:), (:), ..) |
2021-10-31 14:26:56 +0100 | <Hecate> | % :t (:) |
2021-10-31 14:26:56 +0100 | <yahb> | Hecate: a -> [a] -> [a] |
2021-10-31 14:27:33 +0100 | <Hecate> | the 'a' is not the same |
2021-10-31 14:27:36 +0100 | <hippoid> | xsperry: thanks. now it seems obvious |
2021-10-31 14:28:19 +0100 | <hippoid> | so i suppose that means you can apply repeat to any type |
2021-10-31 14:28:55 +0100 | <xsperry> | to a value of any type, yes |
2021-10-31 14:28:59 +0100 | <xsperry> | :t repeat repeat |
2021-10-31 14:29:00 +0100 | <lambdabot> | [a -> [a]] |
2021-10-31 14:29:58 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-10-31 14:33:22 +0100 | jollygood2 | (~bc8165b6@217.29.117.252) |
2021-10-31 14:33:46 +0100 | <jollygood2> | :t repeat (repeat (repeat (:))) |
2021-10-31 14:33:47 +0100 | <lambdabot> | [[[a -> [a] -> [a]]]] |
2021-10-31 14:38:43 +0100 | <hpc> | now you can finally answer the question "how many arguments does id take?" |
2021-10-31 14:42:41 +0100 | mc47 | (~mc47@xmonad/TheMC47) |
2021-10-31 14:43:26 +0100 | <jollygood2> | one, just like all functions. :P |
2021-10-31 14:43:35 +0100 | <hpc> | :P |
2021-10-31 14:43:51 +0100 | Guest31 | (~Guest31@eth-west-pareq2-46-193-4-100.wb.wifirst.net) (Ping timeout: 256 seconds) |
2021-10-31 14:46:50 +0100 | zero | (~z@user/zero) |
2021-10-31 14:48:32 +0100 | __monty__ | (~toonn@user/toonn) |
2021-10-31 14:49:17 +0100 | yin | (~z@user/zero) (Ping timeout: 268 seconds) |
2021-10-31 14:49:28 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-10-31 14:49:41 +0100 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Quit: Must not waste too much time here...) |
2021-10-31 14:51:20 +0100 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
2021-10-31 14:53:22 +0100 | __monty__ | (~toonn@user/toonn) (Client Quit) |
2021-10-31 14:54:51 +0100 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) (Client Quit) |
2021-10-31 15:00:33 +0100 | Farzad | (~FarzadBek@178.131.30.143) |
2021-10-31 15:05:14 +0100 | dsrt^ | (~dsrt@wsip-98-188-242-6.mc.at.cox.net) (Remote host closed the connection) |
2021-10-31 15:09:05 +0100 | frx | (~bc8165b6@cerf.good1.com) |
2021-10-31 15:09:17 +0100 | frx | jacks4 |
2021-10-31 15:11:46 +0100 | sqrt2 | (~ben@80-108-18-7.cable.dynamic.surfer.at) (Ping timeout: 245 seconds) |
2021-10-31 15:13:06 +0100 | sqrt2 | (~ben@80-108-18-7.cable.dynamic.surfer.at) |
2021-10-31 15:15:30 +0100 | gdd | (~gdd@129.199.146.230) (Ping timeout: 260 seconds) |
2021-10-31 15:16:39 +0100 | __monty__ | (~toonn@user/toonn) |
2021-10-31 15:17:06 +0100 | gdd | (~gdd@129.199.146.230) |
2021-10-31 15:20:23 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 15:22:00 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 15:22:06 +0100 | jollygood2 | (~bc8165b6@217.29.117.252) (Quit: http://www.okay.uz/ (Ping timeout)) |
2021-10-31 15:26:30 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-10-31 15:26:54 +0100 | shailangsa | (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) (Remote host closed the connection) |
2021-10-31 15:31:10 +0100 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 260 seconds) |
2021-10-31 15:32:46 +0100 | max22- | (~maxime@2a01cb0883359800143d8394a75c565e.ipv6.abo.wanadoo.fr) |
2021-10-31 15:33:10 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Quit: Leaving) |
2021-10-31 15:35:03 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
2021-10-31 15:48:28 +0100 | machinedgod | (~machinedg@24.105.81.50) |
2021-10-31 15:49:10 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-10-31 15:52:21 +0100 | neurocyte0132889 | (~neurocyte@45.93.111.195) |
2021-10-31 15:52:21 +0100 | neurocyte0132889 | (~neurocyte@45.93.111.195) (Changing host) |
2021-10-31 15:52:21 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) |
2021-10-31 15:55:11 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-10-31 15:55:36 +0100 | epolanski | (uid312403@id-312403.helmsley.irccloud.com) |
2021-10-31 15:55:46 +0100 | nrl^ | (~nrl@wsip-98-188-242-6.mc.at.cox.net) |
2021-10-31 15:59:52 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
2021-10-31 16:01:31 +0100 | Farzad | (~FarzadBek@178.131.30.143) (Quit: Leaving) |
2021-10-31 16:02:27 +0100 | <maerwald> | the Haskell report talks about multipler function arguments in various places though, afair |
2021-10-31 16:03:54 +0100 | sprout_ | (~quassel@2a02:a467:ccd6:1:8872:6fff:30a7:51e0) |
2021-10-31 16:04:16 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Ping timeout: 245 seconds) |
2021-10-31 16:07:25 +0100 | sprout | (~quassel@2a02:a467:ccd6:1:21d2:19c0:e01b:f66c) (Ping timeout: 260 seconds) |
2021-10-31 16:15:01 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) |
2021-10-31 16:19:35 +0100 | <ksu> | 'unless' always reminds me of this great scene: https://www.youtube.com/watch?v=q_vGN9R3c3k |
2021-10-31 16:21:49 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 16:24:07 +0100 | shailangsa | (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) |
2021-10-31 16:26:38 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-10-31 16:27:47 +0100 | DNH | (~DNH@8.43.122.53) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-10-31 16:29:00 +0100 | akspecs__ | (~akspecs@user/akspecs) (Ping timeout: 260 seconds) |
2021-10-31 16:29:35 +0100 | jil | (~user@160.120.146.111) |
2021-10-31 16:29:39 +0100 | <jil> | hello |
2021-10-31 16:31:05 +0100 | DNH | (~DNH@8.43.122.53) |
2021-10-31 16:32:47 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) |
2021-10-31 16:32:50 +0100 | <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 |
2021-10-31 16:35:25 +0100 | hippoid | (~idris@184.105.6.88) (Quit: Lost terminal) |
2021-10-31 16:39:15 +0100 | mbuf | (~Shakthi@171.61.246.251) (Quit: Leaving) |
2021-10-31 16:48:04 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 16:50:09 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 268 seconds) |
2021-10-31 16:51:08 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-10-31 16:51:42 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 16:53:13 +0100 | fendor_ | (~fendor@77.119.160.25.wireless.dyn.drei.com) |
2021-10-31 16:56:02 +0100 | fendor | (~fendor@178.115.79.50.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2021-10-31 16:58:20 +0100 | Jing_ | (~textual@103.121.208.115) |
2021-10-31 17:05:32 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 17:05:32 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 17:05:32 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 17:07:41 +0100 | Null_A | (~null_a@2601:645:8700:2290:714b:c982:dcb8:3f01) |
2021-10-31 17:08:09 +0100 | <Cale> | jil: You could write something like let line = prev_ ++ next_ just above your if |
2021-10-31 17:08:19 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-10-31 17:09:15 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-10-31 17:09:44 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 17:10:59 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 17:14:11 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 264 seconds) |
2021-10-31 17:18:56 +0100 | <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. |
2021-10-31 17:20:18 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 17:20:44 +0100 | <jil> | Great. Thank you Cale |
2021-10-31 17:21:20 +0100 | <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. |
2021-10-31 17:22:46 +0100 | <jil> | yep you are correct kosmikus... and I should correct that. Thank you. |
2021-10-31 17:24:09 +0100 | fendor_ | (~fendor@77.119.160.25.wireless.dyn.drei.com) (Remote host closed the connection) |
2021-10-31 17:24:53 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-10-31 17:25:22 +0100 | fendor | (~fendor@77.119.160.25.wireless.dyn.drei.com) |
2021-10-31 17:26:00 +0100 | __monty__ | (~toonn@user/toonn) |
2021-10-31 17:27:34 +0100 | <jil> | this is better https://paste.debian.net/1217486/ Merci |
2021-10-31 17:28:13 +0100 | Vajb | (~Vajb@ndtzwggz0g23egfbw-2.v6.elisa-mobile.fi) |
2021-10-31 17:30:40 +0100 | <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 ? |
2021-10-31 17:32:35 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-10-31 17:33:05 +0100 | <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 |
2021-10-31 17:33:54 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 17:35:49 +0100 | <jil> | Thank you dsal |
2021-10-31 17:36:52 +0100 | fizzsegfaultbuzz | (~segfaultf@135-180-0-138.static.sonic.net) |
2021-10-31 17:42:38 +0100 | alx741 | (~alx741@181.196.69.253) (Quit: alx741) |
2021-10-31 17:49:53 +0100 | bitmapper | (uid464869@id-464869.lymington.irccloud.com) |
2021-10-31 17:51:37 +0100 | econo | (uid147250@user/econo) |
2021-10-31 17:53:04 +0100 | ByronJohnson | (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) (Remote host closed the connection) |
2021-10-31 17:56:39 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-10-31 17:56:43 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-10-31 17:59:47 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 264 seconds) |
2021-10-31 18:00:41 +0100 | DNH | (~DNH@8.43.122.53) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-10-31 18:03:01 +0100 | mjs2600 | (~mjs2600@c-24-91-3-49.hsd1.vt.comcast.net) (Ping timeout: 245 seconds) |
2021-10-31 18:03:25 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Remote host closed the connection) |
2021-10-31 18:03:37 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-10-31 18:04:04 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 18:05:43 +0100 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2021-10-31 18:08:50 +0100 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds) |
2021-10-31 18:09:18 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-10-31 18:10:06 +0100 | mmhat | (~mmh@55d4be88.access.ecotel.net) (Quit: WeeChat 3.3) |
2021-10-31 18:15:55 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-10-31 18:15:55 +0100 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-10-31 18:15:55 +0100 | wroathe | (~wroathe@user/wroathe) |
2021-10-31 18:16:24 +0100 | Null_A | (~null_a@2601:645:8700:2290:714b:c982:dcb8:3f01) (Remote host closed the connection) |
2021-10-31 18:17:33 +0100 | brainfreeze | (~brainfree@2a03:1b20:4:f011::20d) |
2021-10-31 18:20:16 +0100 | JimL | (~quassel@89-162-2-132.fiber.signal.no) (Ping timeout: 260 seconds) |
2021-10-31 18:20:34 +0100 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2021-10-31 18:23:08 +0100 | JimL | (~quassel@89-162-2-132.fiber.signal.no) |
2021-10-31 18:25:16 +0100 | brainfreeze | (~brainfree@2a03:1b20:4:f011::20d) (Quit: Leaving) |
2021-10-31 18:36:03 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 18:41:30 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
2021-10-31 18:42:31 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) (Quit: Connection closed for inactivity) |
2021-10-31 18:42:49 +0100 | jil | (~user@160.120.146.111) (Remote host closed the connection) |
2021-10-31 18:44:00 +0100 | lbseale | (~lbseale@user/ep1ctetus) |
2021-10-31 18:44:20 +0100 | akspecs__ | (~akspecs@136-24-214-166.cab.webpass.net) |
2021-10-31 18:44:20 +0100 | akspecs__ | (~akspecs@136-24-214-166.cab.webpass.net) (Changing host) |
2021-10-31 18:44:20 +0100 | akspecs__ | (~akspecs@user/akspecs) |
2021-10-31 18:44:49 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:d4e:dbb8:1851:3894) (Remote host closed the connection) |
2021-10-31 18:45:02 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-10-31 18:46:10 +0100 | lbseale_ | (~lbseale@user/ep1ctetus) |
2021-10-31 18:46:41 +0100 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-10-31 18:47:34 +0100 | lbseale__ | (~lbseale@user/ep1ctetus) |
2021-10-31 18:48:58 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:9e27:fb01:4b2b:d1ea) (Ping timeout: 260 seconds) |
2021-10-31 18:49:36 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
2021-10-31 18:49:49 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) |
2021-10-31 18:49:58 +0100 | lbseale | (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds) |
2021-10-31 18:51:22 +0100 | lbseale_ | (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds) |
2021-10-31 18:51:57 +0100 | peterhil | (~peterhil@dsl-hkibng32-54fb56-2.dhcp.inet.fi) |
2021-10-31 18:56:48 +0100 | mei | (~mei@user/mei) (Read error: Connection reset by peer) |
2021-10-31 18:57:59 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 264 seconds) |
2021-10-31 19:00:30 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) (Read error: Connection reset by peer) |
2021-10-31 19:00:35 +0100 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) (Quit: Leaving) |
2021-10-31 19:00:43 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
2021-10-31 19:01:11 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
2021-10-31 19:02:09 +0100 | werneta | (~werneta@70-142-214-115.lightspeed.irvnca.sbcglobal.net) |
2021-10-31 19:03:09 +0100 | DNH | (~DNH@8.43.122.53) |
2021-10-31 19:04:03 +0100 | aegon | (~mike@174.127.249.180) |
2021-10-31 19:04:36 +0100 | eco_ | eco |
2021-10-31 19:04:45 +0100 | SethTisue__ | (sid14912@ilkley.irccloud.com) (Ping timeout: 260 seconds) |
2021-10-31 19:06:23 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) (Ping timeout: 264 seconds) |
2021-10-31 19:07:56 +0100 | SethTisue__ | (sid14912@id-14912.ilkley.irccloud.com) |
2021-10-31 19:18:35 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-10-31 19:22:17 +0100 | Midjak | (~Midjak@82-65-111-221.subs.proxad.net) |
2021-10-31 19:26:12 +0100 | catman | (~catman@user/catman) (Quit: WeeChat 3.4-dev) |
2021-10-31 19:26:36 +0100 | gehmehgeh | (~user@user/gehmehgeh) |
2021-10-31 19:37:44 +0100 | hendursa1 | (~weechat@user/hendursaga) (Quit: hendursa1) |
2021-10-31 19:38:21 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-10-31 19:41:47 +0100 | euandreh | (~euandreh@2804:14c:33:9fe5:eba7:95bb:d099:a7d8) (Ping timeout: 264 seconds) |
2021-10-31 19:43:50 +0100 | alx741 | (~alx741@181.196.69.253) |
2021-10-31 19:45:03 +0100 | hendursaga | (~weechat@user/hendursaga) (Remote host closed the connection) |
2021-10-31 19:45:30 +0100 | hendursaga | (~weechat@user/hendursaga) |
2021-10-31 19:47:28 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) |
2021-10-31 19:51:18 +0100 | catman | (~catman@user/catman) |
2021-10-31 19:55:14 +0100 | lbseale__ | (~lbseale@user/ep1ctetus) (Ping timeout: 260 seconds) |
2021-10-31 20:01:39 +0100 | fvr | (uid503686@id-503686.uxbridge.irccloud.com) (Quit: Connection closed for inactivity) |
2021-10-31 20:05:00 +0100 | Sgeo | (~Sgeo@user/sgeo) |
2021-10-31 20:05:45 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 20:10:38 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 260 seconds) |
2021-10-31 20:23:44 +0100 | jacks4 | (~bc8165b6@cerf.good1.com) (Quit: CGI:IRC (Session timeout)) |
2021-10-31 20:27:39 +0100 | notzmv | (~zmv@user/notzmv) (Read error: Connection reset by peer) |
2021-10-31 20:29:42 +0100 | notzmv | (~zmv@user/notzmv) |
2021-10-31 20:31:26 +0100 | acidsys | (~LSD@2.lsd.systems) (Excess Flood) |
2021-10-31 20:32:01 +0100 | acidsys | (~LSD@2.lsd.systems) |
2021-10-31 20:32:06 +0100 | ByronJohnson | (~bairyn@50-250-232-19-static.hfc.comcastbusiness.net) |
2021-10-31 20:33:15 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) (Ping timeout: 260 seconds) |
2021-10-31 20:33:34 +0100 | shailangsa | (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) (Remote host closed the connection) |
2021-10-31 20:35:21 +0100 | xff0x | (~xff0x@2001:1a81:5344:9700:97c:3a82:54b0:a6da) |
2021-10-31 20:40:17 +0100 | proboscis | (~proboscis@115-189-83-206.mobile.spark.co.nz) (Ping timeout: 264 seconds) |
2021-10-31 20:40:49 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) |
2021-10-31 20:48:17 +0100 | yrlnry | (~mjd@pool-74-109-22-90.phlapa.fios.verizon.net) |
2021-10-31 20:50:27 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
2021-10-31 20:52:18 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
2021-10-31 20:57:50 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection) |
2021-10-31 20:57:51 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) (Quit: The Lounge - https://thelounge.chat) |
2021-10-31 21:00:08 +0100 | <maerwald> | MultiWayIf and LambdaCase I usually enable globally |
2021-10-31 21:02:24 +0100 | neurocyte0132889 | (~neurocyte@45.93.111.195) |
2021-10-31 21:02:24 +0100 | neurocyte0132889 | (~neurocyte@45.93.111.195) (Changing host) |
2021-10-31 21:02:24 +0100 | neurocyte0132889 | (~neurocyte@user/neurocyte) |
2021-10-31 21:05:11 +0100 | juhp | (~juhp@128.106.188.220) (Ping timeout: 264 seconds) |
2021-10-31 21:05:12 +0100 | Vajb | (~Vajb@ndtzwggz0g23egfbw-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
2021-10-31 21:05:46 +0100 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-10-31 21:06:17 +0100 | wootehfoot | (~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer) |
2021-10-31 21:07:35 +0100 | juhp | (~juhp@128.106.188.220) |
2021-10-31 21:07:42 +0100 | <yushyin> | curious to see how many will replace multiwayif with lambdacases |
2021-10-31 21:08:59 +0100 | <geekosaur> | mm, thye're not really either/or, MultiWayIf doesn't consume a parameter whereas LambdaCase does |
2021-10-31 21:09:31 +0100 | <yushyin> | lambdacases, plural |
2021-10-31 21:09:54 +0100 | rick_feynmann | (~nick_all@139.102.124.132) |
2021-10-31 21:10:34 +0100 | <yushyin> | geekosaur: https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0302-cases.rst yet another syntax extension :& |
2021-10-31 21:12:03 +0100 | lambdap | (~lambdap@static.167.190.119.168.clients.your-server.de) (Quit: lambdap) |
2021-10-31 21:12:22 +0100 | lambdap | (~lambdap@static.167.190.119.168.clients.your-server.de) |
2021-10-31 21:14:38 +0100 | <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 |
2021-10-31 21:15:23 +0100 | <maerwald> | toxic kids on discord? :D |
2021-10-31 21:15:27 +0100 | <juri_> | rule #1: don't be as asshole. :) |
2021-10-31 21:15:34 +0100 | alx741 | (~alx741@181.196.69.253) (Ping timeout: 260 seconds) |
2021-10-31 21:15:47 +0100 | <hpc> | pretty much just the network rules |
2021-10-31 21:16:09 +0100 | <rick_feynmann> | ok that makes sense. just checking |
2021-10-31 21:16:40 +0100 | <geekosaur> | https://wiki.haskell.org/IRC_channel#Principles |
2021-10-31 21:17:11 +0100 | <geekosaur> | and yes, basically "don't be a dick" |
2021-10-31 21:17:24 +0100 | <maerwald> | good to see haskell wiki still exists |
2021-10-31 21:17:45 +0100 | <hpc> | neat, that third bullet point is official rules |
2021-10-31 21:18:34 +0100 | <hololeap> | anyone know of a way I can disable a line of doctest testing while keeping the same haddock formatting? |
2021-10-31 21:19:21 +0100 | rick_feynmann | (~nick_all@139.102.124.132) (Quit: Leaving) |
2021-10-31 21:19:22 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
2021-10-31 21:19:32 +0100 | <sm> | >>> -- ... ? |
2021-10-31 21:20:01 +0100 | <maerwald> | you could probably just shadow the function in the setup directive |
2021-10-31 21:20:29 +0100 | <maerwald> | at least with cabal-docspec that's possible I think |
2021-10-31 21:20:57 +0100 | <hololeap> | shadow the function? |
2021-10-31 21:21:00 +0100 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-10-31 21:21:01 +0100 | <maerwald> | or make a dummy function with trailing underscore |
2021-10-31 21:21:07 +0100 | <maerwald> | that does nothing |
2021-10-31 21:21:27 +0100 | jinsun__ | (~quassel@user/jinsun) |
2021-10-31 21:22:07 +0100 | rick_feynmann | (~nick_all@139.102.124.132) |
2021-10-31 21:22:17 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) |
2021-10-31 21:23:47 +0100 | MQ-17J | (~MQ-17J@8.6.144.203) (Read error: Connection reset by peer) |
2021-10-31 21:24:41 +0100 | jinsun | (~quassel@user/jinsun) (Ping timeout: 245 seconds) |
2021-10-31 21:24:41 +0100 | MQ-17J | (~MQ-17J@8.6.144.203) |
2021-10-31 21:24:54 +0100 | rick_feynmann | (~nick_all@139.102.124.132) (Quit: Leaving) |
2021-10-31 21:24:58 +0100 | <maerwald> | yes, works with cabal-docspec |
2021-10-31 21:25:29 +0100 | <maerwald> | -- $setup |
2021-10-31 21:25:30 +0100 | <maerwald> | >>> let shadowedFunct _ _ = False |
2021-10-31 21:25:47 +0100 | <maerwald> | sth like that |
2021-10-31 21:28:13 +0100 | alx741 | (~alx741@181.196.69.253) |
2021-10-31 21:28:15 +0100 | shailangsa | (~shailangs@host217-39-45-200.range217-39.btcentralplus.com) |
2021-10-31 21:29:07 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
2021-10-31 21:29:55 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) |
2021-10-31 21:33:00 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Quit: FinnElija) |
2021-10-31 21:34:56 +0100 | cjb | (~cjbayliss@user/cjb) |
2021-10-31 21:35:03 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 21:36:16 +0100 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-10-31 21:36:37 +0100 | <hololeap> | this is what fails: https://github.com/dhall-lang/dhall-haskell/blob/master/dhall-toml/src/Dhall/DhallToToml.hs#L218-L… |
2021-10-31 21:37:47 +0100 | <hololeap> | this is the error I get: http://sprunge.us/nrvtl0 |
2021-10-31 21:38:40 +0100 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection) |
2021-10-31 21:39:04 +0100 | <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. |
2021-10-31 21:39:56 +0100 | <sclv> | if the test isn't passing you should file a ticket -- it seems like their error! |
2021-10-31 21:40:16 +0100 | <hololeap> | yeah, but in the meantime, I want to package this |
2021-10-31 21:41:05 +0100 | <sclv> | then remove the formatting from the block in the meantime, or change the test so it passes |
2021-10-31 21:41:48 +0100 | catman | (~catman@user/catman) (Read error: Connection reset by peer) |
2021-10-31 21:42:03 +0100 | NoidedSuper | (~manjaro-u@2601:280:5a81:520::f8be) |
2021-10-31 21:42:04 +0100 | geekosaur | wonders if the latter is reliably possible |
2021-10-31 21:42:14 +0100 | <sclv> | afaik there's no way to leave the cmd exactly the same and fully disable the test. |
2021-10-31 21:42:17 +0100 | <sclv> | er the haddock |
2021-10-31 21:42:24 +0100 | mvk | (~mvk@2607:fea8:5cc1:300::d3fb) |
2021-10-31 21:42:28 +0100 | <geekosaur> | if it's say using HashMap is it guaranteed to use the same order every time? |
2021-10-31 21:42:47 +0100 | <Hecate> | https://www.reddit.com/r/haskell/comments/qjxjh5/ann_jordan_abstract_inspectable_json/ |
2021-10-31 21:42:50 +0100 | <Hecate> | noice |
2021-10-31 21:42:51 +0100 | <sclv> | i suspect in this case its swapped the hashmap for the ordmap in the latest, so its more reliable now! |
2021-10-31 21:43:15 +0100 | <sclv> | (latest aeson) |
2021-10-31 21:43:48 +0100 | <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 |
2021-10-31 21:44:06 +0100 | <NoidedSuper> | That Jordan library looks sick Hecate, I bet the guy who wrote it is smart and attractive |
2021-10-31 21:44:31 +0100 | <NoidedSuper> | (I wrote it :D. You have no idea how hype I am that people are finding it cool enough to share) |
2021-10-31 21:46:42 +0100 | econo | (uid147250@user/econo) |
2021-10-31 21:46:50 +0100 | <hololeap> | which explains why it fails with the inner list being out of order |
2021-10-31 21:47:43 +0100 | fog | (~fog@176-157-77-163.abo.bbox.fr) |
2021-10-31 21:48:15 +0100 | catman | (~catman@user/catman) |
2021-10-31 21:50:16 +0100 | fog | (~fog@176-157-77-163.abo.bbox.fr) (Client Quit) |
2021-10-31 21:50:31 +0100 | fen | (~fen@176-157-77-163.abo.bbox.fr) |
2021-10-31 21:50:57 +0100 | euandreh | (~euandreh@2804:14c:33:9fe5:af93:19b0:8b26:3fa2) |
2021-10-31 21:51:17 +0100 | fen | (~fen@176-157-77-163.abo.bbox.fr) (Client Quit) |
2021-10-31 21:51:34 +0100 | motle | (~motle@176-157-77-163.abo.bbox.fr) |
2021-10-31 21:51:40 +0100 | motle | (~motle@176-157-77-163.abo.bbox.fr) (Client Quit) |
2021-10-31 21:52:10 +0100 | dartford | (~dartford@176-157-77-163.abo.bbox.fr) |
2021-10-31 21:52:20 +0100 | <dartford> | hi! |
2021-10-31 21:52:45 +0100 | <dartford> | >700 users online! iv never seen it so busy |
2021-10-31 21:52:52 +0100 | <dartford> | anyone active? |
2021-10-31 21:52:59 +0100 | <geekosaur> | yes |
2021-10-31 21:53:03 +0100 | <dartford> | woop! |
2021-10-31 21:53:14 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
2021-10-31 21:53:17 +0100 | <geekosaur> | and we've been riding over 700 users for a couple of months now |
2021-10-31 21:53:31 +0100 | chomwitt | (~chomwitt@ppp-2-85-245-90.home.otenet.gr) (Read error: Connection reset by peer) |
2021-10-31 21:53:40 +0100 | <geekosaur> | the move from fn did shake out a bunch of never-active folks though |
2021-10-31 21:53:49 +0100 | <dartford> | awesome, i want to ask about probabilistic models in streaming space models as state traversals |
2021-10-31 21:54:31 +0100 | <sm> | some of them moved to #haskell:matrix.org |
2021-10-31 21:54:43 +0100 | <dartford> | geekosaur: i guess there are some more people learning haskell each year, or maybe people from other languages migrating |
2021-10-31 21:55:46 +0100 | <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 |
2021-10-31 21:56:17 +0100 | <dartford> | if it were me, id just "partition" the state, but i gather that this isnt idomatic haskell, and monad transformers or something is |
2021-10-31 21:56:38 +0100 | <dartford> | like, keep the random seed as "part" of the state |
2021-10-31 21:56:41 +0100 | <dartford> | somehow... |
2021-10-31 21:57:07 +0100 | <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 |
2021-10-31 21:57:20 +0100 | <dartford> | does that make sense? |
2021-10-31 21:57:45 +0100 | <Rembane_> | dartford: What stops you from having the state as an argument to the functions working on it? |
2021-10-31 21:57:54 +0100 | <dartford> | pardon? |
2021-10-31 21:58:09 +0100 | <dartford> | im not sure what you mean, or why you think im saying that |
2021-10-31 21:58:53 +0100 | kupi | (uid212005@id-212005.hampstead.irccloud.com) |
2021-10-31 21:59:24 +0100 | <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. |
2021-10-31 21:59:28 +0100 | <dartford> | :t mapAccumL |
2021-10-31 21:59:29 +0100 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2021-10-31 21:59:43 +0100 | <dartford> | the state is `a' there, the functions act on it just fine |
2021-10-31 21:59:55 +0100 | <dartford> | this is the archetypal "state traversal" |
2021-10-31 22:00:11 +0100 | <dartford> | ie, traverse, but where the applicative is chosen to be StateL |
2021-10-31 22:01:01 +0100 | <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 |
2021-10-31 22:01:16 +0100 | mestre | (~mestre@191.177.175.57) |
2021-10-31 22:01:32 +0100 | <dartford> | so that on each encountered element, the new seed can be updated into its portion of the state |
2021-10-31 22:02:11 +0100 | <dartford> | normally people use monad transformers for this partitioning of reader/writer/state monads |
2021-10-31 22:02:28 +0100 | <dartford> | instead of lenses into the "seed part" |
2021-10-31 22:02:36 +0100 | <dartford> | see what i mean? |
2021-10-31 22:03:07 +0100 | <dartford> | im confused about if im supposed to use lenses or nested monads or what |
2021-10-31 22:03:34 +0100 | <hololeap> | It seems like you just want a regular State monad to me |
2021-10-31 22:03:52 +0100 | <dartford> | thats already factored into mapAccumL |
2021-10-31 22:03:59 +0100 | <dartford> | really i should be using traverse, sorry |
2021-10-31 22:04:02 +0100 | <dartford> | :t traverse |
2021-10-31 22:04:03 +0100 | <lambdabot> | (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) |
2021-10-31 22:04:17 +0100 | zebrag | (~chris@user/zebrag) |
2021-10-31 22:04:41 +0100 | <dartford> | so thats `f' in the type signature, which should hold both the RNG seed, and anything else thats an "updated carry" |
2021-10-31 22:05:10 +0100 | <dartford> | i guess its a question about composite data, and nested datatypes vs monad transformers |
2021-10-31 22:05:53 +0100 | <dartford> | ie, it would be a composition of monads that would still have the applicative instance of StateL to allow it to scan properly |
2021-10-31 22:06:00 +0100 | <dartford> | i think... |
2021-10-31 22:07:50 +0100 | <hololeap> | % :t \f -> runState . traverse (state . f) |
2021-10-31 22:07:50 +0100 | <yahb> | hololeap: Traversable t => (a -> s -> (b, s)) -> t a -> s -> (t b, s) |
2021-10-31 22:07:55 +0100 | <dartford> | https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Traversable.html#mapAccumL |
2021-10-31 22:08:20 +0100 | <dartford> | ah, your implementation is much better, it doesnt use coerce |
2021-10-31 22:08:22 +0100 | <dartford> | thanks |
2021-10-31 22:08:23 +0100 | <hololeap> | so you are correct that mapAccum is the same as traverse over some State |
2021-10-31 22:08:42 +0100 | <dartford> | thats why i was calling it a "state traversal" - basically a scanner |
2021-10-31 22:09:02 +0100 | <dartford> | and im calling the `s' variable a "carried state" |
2021-10-31 22:09:13 +0100 | <dartford> | and the whole thing is a "streaming state space model" |
2021-10-31 22:09:20 +0100 | <hololeap> | but I think you might be overcomplicating things. what you're looking for doesn't need a huge monad transformer stack |
2021-10-31 22:09:34 +0100 | <dartford> | since StateL is lazy, so it can work over infinite streams, unlike plain old traverse |
2021-10-31 22:09:50 +0100 | <dartford> | i think theres a superclass proposal in their somewhere |
2021-10-31 22:10:17 +0100 | <dartford> | hololeap: sure, i mean, i could use a lens, but thats more complicated right? |
2021-10-31 22:10:23 +0100 | ec | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2021-10-31 22:10:37 +0100 | <dartford> | like, i was assuming the monad transformer stack way was actually easyer than the nested datatype way then |
2021-10-31 22:10:53 +0100 | <dartford> | since there is some subtle handling of the algebra of monadic composition or something |
2021-10-31 22:10:57 +0100 | <hololeap> | no, none of this stuff is complicated. it's quite basic really, perhaps more basic than you're expecting |
2021-10-31 22:10:58 +0100 | <dartford> | i never fully understood it |
2021-10-31 22:11:22 +0100 | <dartford> | ok, so that way you need the existance of a lens in the constraint |
2021-10-31 22:11:29 +0100 | ec | (~ec@gateway/tor-sasl/ec) |
2021-10-31 22:11:47 +0100 | <hololeap> | @hoogle zoom |
2021-10-31 22:11:47 +0100 | <lambdabot> | Control.Lens.Combinators zoom :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c |
2021-10-31 22:11:47 +0100 | <lambdabot> | Control.Lens.Zoom zoom :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c |
2021-10-31 22:11:47 +0100 | <lambdabot> | Diagrams.Prelude zoom :: Zoom m n s t => LensLike' (Zoomed m c) t s -> m c -> n c |
2021-10-31 22:12:00 +0100 | <dartford> | something like; CanUpdateTheSeed f,ApplicativesLikeStateL f => |
2021-10-31 22:12:34 +0100 | <dartford> | ok, lets not *actually* use lens |
2021-10-31 22:12:35 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
2021-10-31 22:12:47 +0100 | <dartford> | i cant read those type signatures and id prefer not to have to learn how to |
2021-10-31 22:12:50 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) |
2021-10-31 22:13:02 +0100 | <dartford> | i mean, this is the main reason im leaning towards the nested monads way |
2021-10-31 22:13:14 +0100 | tabemann | (~travisb@2600:1700:7990:24e0:95ab:c391:8962:61e4) (Remote host closed the connection) |
2021-10-31 22:13:14 +0100 | <hololeap> | there's something that I'm looking for that you may be interested in |
2021-10-31 22:13:26 +0100 | <dartford> | actually, i think the only way it would work is if they were both States |
2021-10-31 22:13:33 +0100 | tabemann | (~travisb@2600:1700:7990:24e0:25bd:a66c:dc78:d416) |
2021-10-31 22:13:38 +0100 | <hololeap> | but really you will be passing some concrete state around and you should know how to modify it, with or without lenses |
2021-10-31 22:13:40 +0100 | <dartford> | but i guess this could be relaxed to parts being only Reader or Writer |
2021-10-31 22:14:44 +0100 | <dartford> | ok, so suppose the only thing i ever read+write is the RNG seed, but i also accumulate some data into a writer |
2021-10-31 22:15:14 +0100 | <dartford> | like, i grow a list of accumulated elements |
2021-10-31 22:15:27 +0100 | <hololeap> | do you even need a Writer here? do you have some monoidal data that you want to append to as a side-effect? |
2021-10-31 22:15:31 +0100 | acidjnk | (~acidjnk@p5487d843.dip0.t-ipconnect.de) |
2021-10-31 22:15:45 +0100 | <dartford> | something like using cons to update the state, but not actually using it, in mapAccumL |
2021-10-31 22:15:49 +0100 | <dartford> | :t mapAccumL |
2021-10-31 22:15:50 +0100 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2021-10-31 22:16:38 +0100 | <dartford> | i thought if you update it you need writer... |
2021-10-31 22:17:04 +0100 | <dartford> | er, ok nvm lets just use full state |
2021-10-31 22:17:15 +0100 | <dartford> | since it would need to be read to update it |
2021-10-31 22:17:27 +0100 | <dartford> | :t mapAccumL (\_ b -> (b:?,undefined)) |
2021-10-31 22:17:28 +0100 | <lambdabot> | error: |
2021-10-31 22:17:28 +0100 | <lambdabot> | A section must be enclosed in parentheses thus: (b :?) |
2021-10-31 22:17:34 +0100 | <dartford> | oops! |
2021-10-31 22:17:48 +0100 | <hololeap> | https://hackage.haskell.org/package/optics-extra-0.4/docs/Optics-Zoom.html |
2021-10-31 22:17:50 +0100 | <dartford> | like, it needs the `a' not to be a wildcard above |
2021-10-31 22:18:01 +0100 | <dartford> | hololeap: i really want to avoid lenses |
2021-10-31 22:18:23 +0100 | <hololeap> | ok, it seemed like you were interested earlier |
2021-10-31 22:18:50 +0100 | <dartford> | i was presenting 2 alternatives, and asking about the other |
2021-10-31 22:19:05 +0100 | <dartford> | well, i kind of forgot how difficult i find lesnse |
2021-10-31 22:19:20 +0100 | <hololeap> | you might like this optics library a little better |
2021-10-31 22:19:29 +0100 | <dartford> | im sorry |
2021-10-31 22:19:35 +0100 | Alleria | (~textual@user/alleria) (Remote host closed the connection) |
2021-10-31 22:19:41 +0100 | <hololeap> | just for future reference |
2021-10-31 22:20:03 +0100 | <dartford> | its illegible, im sorry |
2021-10-31 22:20:03 +0100 | proboscis | (~proboscis@115-189-130-93.mobile.spark.co.nz) (Read error: Connection reset by peer) |
2021-10-31 22:20:25 +0100 | <hololeap> | yeah it takes some getting used to, for sure, and the type signatures don't help much, unfortunately |
2021-10-31 22:20:30 +0100 | <dartford> | even if it did exactly what i described, its impenetrable |
2021-10-31 22:20:31 +0100 | proboscis | (~proboscis@14.137.28.197) |
2021-10-31 22:20:43 +0100 | <dartford> | none of it helps at all! |
2021-10-31 22:21:08 +0100 | <dartford> | it has some inklings that its the right thing, suggesting you can "change part of the state" |
2021-10-31 22:21:25 +0100 | <dartford> | but i can say that quite easily, "the rng would have its own lens" |
2021-10-31 22:21:31 +0100 | <dartford> | i just use that term to comunicate |
2021-10-31 22:21:41 +0100 | <dartford> | i have no intension of ever wrangling with its machinery |
2021-10-31 22:22:29 +0100 | <dartford> | i use deep extensible generic containers instead of anything to do with records, is the actual reason for my hesitance |
2021-10-31 22:22:36 +0100 | <dartford> | but this is an asside |
2021-10-31 22:22:49 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection) |
2021-10-31 22:23:04 +0100 | <dartford> | the only relavence being, this is not yet something we have a unified approach too |
2021-10-31 22:23:10 +0100 | <dartford> | "change that part of it" |
2021-10-31 22:23:25 +0100 | <dartford> | easyer said than done! |
2021-10-31 22:23:42 +0100 | <dartford> | my approach uses algebraic pointers instead of string symbol records |
2021-10-31 22:23:52 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) |
2021-10-31 22:24:04 +0100 | <dartford> | "down 3 levels, along 2, down until the leaf" kind of thing |
2021-10-31 22:24:29 +0100 | <dartford> | these directions are equivalent, and i spent years developing it. im not going to start on with symbolic records now |
2021-10-31 22:24:49 +0100 | <dartford> | you cant add together records... thats why i bang on about mine being algebraic |
2021-10-31 22:24:59 +0100 | <dartford> | navigations compose... |
2021-10-31 22:25:24 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 22:25:26 +0100 | <dartford> | but then, when everything is an nd grid, where positions make a lot of sense, |
2021-10-31 22:25:35 +0100 | <dartford> | and then *only one of them is special* |
2021-10-31 22:25:40 +0100 | <dartford> | because its the RNG seed |
2021-10-31 22:25:43 +0100 | <dartford> | i get scuppered |
2021-10-31 22:26:11 +0100 | <dartford> | i figured the easyest way would just be to wrap it up in the probability monad |
2021-10-31 22:26:24 +0100 | <dartford> | and do the monad transformer stack way instead |
2021-10-31 22:26:51 +0100 | <hololeap> | what you're calling "the probability monad" is just State carrying around some random seed, right? |
2021-10-31 22:27:02 +0100 | <dartford> | (instead, of having the seed as part of the datatype, and reserving that extensible domain for the euclidian grid) |
2021-10-31 22:27:04 +0100 | <hololeap> | and perhaps some other info |
2021-10-31 22:27:23 +0100 | <dartford> | hololeap: exactly, essentially just a tuple with an Int, nothing that should be too difficult... |
2021-10-31 22:27:26 +0100 | proboscis | (~proboscis@14.137.28.197) (Ping timeout: 260 seconds) |
2021-10-31 22:27:43 +0100 | <dartford> | (Int,BigCrazyExtensibleGraphThing) |
2021-10-31 22:27:45 +0100 | proboscis | (~proboscis@14.137.28.197) |
2021-10-31 22:27:53 +0100 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
2021-10-31 22:28:17 +0100 | <dartford> | its just, this form of "extension", pairing it with the seed int, isnt the same way as the graph is extended |
2021-10-31 22:28:20 +0100 | <sclv> | that seems very reasonable |
2021-10-31 22:28:34 +0100 | <dartford> | cheers! |
2021-10-31 22:28:35 +0100 | yauhsien | (~yauhsien@61-231-61-245.dynamic-ip.hinet.net) (Ping timeout: 264 seconds) |
2021-10-31 22:28:44 +0100 | <dartford> | so wtf do i do!? |
2021-10-31 22:29:16 +0100 | <sclv> | what do you mean. you just described what you do |
2021-10-31 22:29:24 +0100 | <sclv> | you have a state monad that has a pair in the state |
2021-10-31 22:29:37 +0100 | <dartford> | i mean, i dont know how to work with monad transformers |
2021-10-31 22:29:46 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-10-31 22:29:50 +0100 | <sclv> | you don't need a transformer if you just have a single state with a pair in the state |
2021-10-31 22:30:08 +0100 | <dartford> | i reccon to presereve the lazy StateL business, for the stream transduction, so i need a similar Applicative instance for the (Int,) |
2021-10-31 22:30:32 +0100 | <dartford> | sclv: oh, i think i was anticipating its partial application |
2021-10-31 22:30:37 +0100 | img | (~img@user/img) |
2021-10-31 22:30:47 +0100 | <dartford> | like, so i could do "probabilistic scanning" |
2021-10-31 22:30:57 +0100 | <dartford> | as a thing that was already abstracted |
2021-10-31 22:31:02 +0100 | <dartford> | if that makes any sense at all |
2021-10-31 22:31:17 +0100 | <dartford> | like, handling this "top layer" already |
2021-10-31 22:31:20 +0100 | <sclv> | just follow the types -- you can adapt any functions that worked over the old state to work over one component of the tuple |
2021-10-31 22:31:25 +0100 | <dartford> | ie, having to partition it into layers |
2021-10-31 22:31:38 +0100 | <dartford> | thats why i was considering the monad transformer stack to begin with |
2021-10-31 22:32:11 +0100 | proboscis | (~proboscis@14.137.28.197) (Ping timeout: 264 seconds) |
2021-10-31 22:32:36 +0100 | <dartford> | sclv: i want to compose two lazy "StateL style" applicatives together to get a new lazy StateL applicative style thing |
2021-10-31 22:32:48 +0100 | <dartford> | so the scanners work |
2021-10-31 22:32:55 +0100 | <sclv> | what is a StateL |
2021-10-31 22:33:00 +0100 | <sclv> | also applicatives compose directly |
2021-10-31 22:33:02 +0100 | <dartford> | if the applicative instances dont *compose* then this wont work |
2021-10-31 22:33:13 +0100 | <dartford> | they are different instances |
2021-10-31 22:33:20 +0100 | <dartford> | and a new instance is required for their nesting |
2021-10-31 22:33:27 +0100 | <sclv> | https://hackage.haskell.org/package/base-4.16.0.0/docs/Data-Functor-Compose.html#t:Compose |
2021-10-31 22:33:30 +0100 | <dartford> | thats the kind of composition i mean. not <*> |
2021-10-31 22:34:05 +0100 | <dartford> | oh, sorry, you were talking about the same form of composition... |
2021-10-31 22:34:15 +0100 | <dartford> | im just concerned it wont preserve the lazyness |
2021-10-31 22:34:29 +0100 | <sclv> | if you don't need monad composition, just applicative composition, it comes via Compose, no transformers necessary |
2021-10-31 22:34:29 +0100 | <dartford> | not all applicatives end up producing lazy traversals, but StateL does... |
2021-10-31 22:34:39 +0100 | <dartford> | nice! |
2021-10-31 22:34:41 +0100 | <dartford> | thanks |
2021-10-31 22:34:49 +0100 | <dartford> | what about the lazyness consideration though? |
2021-10-31 22:35:01 +0100 | <dartford> | i guess they are both StateL actually... |
2021-10-31 22:35:18 +0100 | <dartford> | does that have its own rule for how it forms a new applicative via use of Compose? |
2021-10-31 22:35:44 +0100 | <dartford> | like, StateL is basically just a tuple at the end of the day, iirc |
2021-10-31 22:36:00 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 22:36:07 +0100 | <dartford> | so it should work for how i want it to handle the RNG seed |
2021-10-31 22:36:10 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
2021-10-31 22:36:15 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 22:36:21 +0100 | <sclv> | your description is both very specific and vague |
2021-10-31 22:36:22 +0100 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-10-31 22:36:31 +0100 | <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 |
2021-10-31 22:36:41 +0100 | <dartford> | basically, this describes an extensible deep datatype equivalent, instead of nested pairs, as nested StateL applicatives |
2021-10-31 22:37:01 +0100 | <dartford> | motivated by its use for scanning |
2021-10-31 22:37:05 +0100 | <dartford> | (!) |
2021-10-31 22:37:14 +0100 | <dartford> | (seems like a result, right?) |
2021-10-31 22:37:41 +0100 | <dartford> | Q"which kind of extensible generic lens thingy do i need" ? |
2021-10-31 22:37:52 +0100 | <dartford> | A: nested StateL applicatives using Compose |
2021-10-31 22:38:00 +0100 | <dartford> | peer review?# |
2021-10-31 22:38:35 +0100 | <dartford> | what do you reccon? |
2021-10-31 22:39:03 +0100 | <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. |
2021-10-31 22:39:18 +0100 | <dartford> | peer review denied. |
2021-10-31 22:39:23 +0100 | <dartford> | ok, thanks for the help |
2021-10-31 22:40:10 +0100 | <dartford> | really hate it when that happens! |
2021-10-31 22:40:31 +0100 | <dartford> | anyone that understood could chip in? |
2021-10-31 22:41:14 +0100 | <geekosaur> | I don't think any of us really understood |
2021-10-31 22:42:02 +0100 | <dartford> | well, regardless of that assertion, im not going to be roped into another explanation if this one would do |
2021-10-31 22:42:11 +0100 | <dartford> | like, maybe you just cant be bothered, idk! |
2021-10-31 22:42:25 +0100 | <dartford> | this is bat country |
2021-10-31 22:42:39 +0100 | <dartford> | rabbit holes must be avoided |
2021-10-31 22:43:14 +0100 | <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 |
2021-10-31 22:44:03 +0100 | <geekosaur> | I've been sitting here trying to follow the discussion and just getting more and more confused as it went on |
2021-10-31 22:46:54 +0100 | Jing_ | (~textual@103.121.208.115) (Remote host closed the connection) |
2021-10-31 22:47:09 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) (Remote host closed the connection) |
2021-10-31 22:47:31 +0100 | brainfreeze | (~brainfree@2a03:1b20:4:f011::20d) |
2021-10-31 22:49:34 +0100 | <dartford> | hmm, thats quite bad |
2021-10-31 22:50:14 +0100 | nickkkkk_all | (~nick_all@139.102.124.132) |
2021-10-31 22:50:39 +0100 | <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 |
2021-10-31 22:50:56 +0100 | <dartford> | and then your like "dude, i cant follow, spoonfeed us" |
2021-10-31 22:51:39 +0100 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:54f0:825c:9f33:c349) |
2021-10-31 22:51:44 +0100 | <dsal> | Sometimes when communication isn't effective, the communicator needs to do a better job. |
2021-10-31 22:51:47 +0100 | <dartford> | erm, oh right, maybe you dont understand why StateL is motivated by scanners, aka "state traversals" - for lazy compositional stream transduction |
2021-10-31 22:52:24 +0100 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-10-31 22:52:35 +0100 | <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 |
2021-10-31 22:52:49 +0100 | <dartford> | otherwise im just left guessing |
2021-10-31 22:52:57 +0100 | <dartford> | maybe thats direction enough, but not for me |
2021-10-31 22:53:15 +0100 | <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 |
2021-10-31 22:53:17 +0100 | <dsal> | When nobody understands you, it's not everyone else who's at fault. |
2021-10-31 22:53:24 +0100 | <dartford> | "frustrate them towards their goal" being, like, kind of, suboptimal from *my* perspective |
2021-10-31 22:53:26 +0100 | <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 |
2021-10-31 22:53:36 +0100 | ksu | (~ksu@user/prtr) (End of Transmission Block) |
2021-10-31 22:53:56 +0100 | <dartford> | geekosaur: seems like lens "means" - i can get at part of it |
2021-10-31 22:54:26 +0100 | <hololeap> | lens is really just a convenience thing. they don't do anything that you couldn't already do without them |
2021-10-31 22:54:34 +0100 | <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 |
2021-10-31 22:54:52 +0100 | <dartford> | i just have to explain that i dont want to actually use someone elses machinery since im developing my own |
2021-10-31 22:54:54 +0100 | tabemann | (~travisb@2600:1700:7990:24e0:25bd:a66c:dc78:d416) (Quit: Leaving) |
2021-10-31 22:55:10 +0100 | <dartford> | well, its motivated by scanning |
2021-10-31 22:55:11 +0100 | <geekosaur> | "lens" describes a specific data access mechanism based on van Laarhoven lenses |
2021-10-31 22:55:25 +0100 | <dartford> | we wouldnt have arived at Comosed StateL applicatives without that as the specifying thing |
2021-10-31 22:55:40 +0100 | <dartford> | and basically, what we end up constructing is a "BIGCRAZYEXTENSIBLETHING" |
2021-10-31 22:55:48 +0100 | <dartford> | so no, i dont think those are superflous notions |
2021-10-31 22:55:55 +0100 | <dartford> | they are infact, almost all of the actual thing |
2021-10-31 22:56:04 +0100 | <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 |
2021-10-31 22:56:32 +0100 | <dartford> | geekosaur: yeah exactly, a getter and a setter, being able to access part of the thing |
2021-10-31 22:56:41 +0100 | <dartford> | "access" |
2021-10-31 22:56:41 +0100 | tabemann | (~tabemann@2600:1700:7990:24e0:25bd:a66c:dc78:d416) |
2021-10-31 22:56:54 +0100 | <dartford> | "lens" into it |
2021-10-31 22:57:09 +0100 | <dartford> | its a common term and im using it correctly |
2021-10-31 22:57:33 +0100 | <dartford> | but, no records, please |
2021-10-31 22:58:04 +0100 | <dartford> | if the RNG seed is on the outer layer, i will use this *positional* information only |
2021-10-31 22:58:13 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
2021-10-31 22:58:16 +0100 | <dartford> | layered pairs essentially |
2021-10-31 22:58:19 +0100 | <dartford> | everything is |
2021-10-31 22:58:34 +0100 | <dartford> | thats why its what your true love gives to you on the first day of christmas |
2021-10-31 22:58:42 +0100 | <dartford> | "part"ridges, in *pair* trees |
2021-10-31 22:58:53 +0100 | mestre | (~mestre@191.177.175.57) (Quit: Lost terminal) |
2021-10-31 22:59:00 +0100 | <dartford> | deep theorm there, but just a mnemonic |
2021-10-31 23:00:02 +0100 | <dartford> | im just contesting having to write carrot underscore RNG_ update zoom underscore |
2021-10-31 23:00:19 +0100 | <dartford> | which i dont believe is at all legible |
2021-10-31 23:00:32 +0100 | <dartford> | "update the outer layer, remember which layer is which" |
2021-10-31 23:00:39 +0100 | <dartford> | is my preferred approach |
2021-10-31 23:01:19 +0100 | <dartford> | anyway, this is why i refuse to be gauded into further explanations, my first one was fine |
2021-10-31 23:01:26 +0100 | <dartford> | now im just getting pissed |
2021-10-31 23:01:30 +0100 | <dartford> | i appologise |
2021-10-31 23:03:01 +0100 | <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 |
2021-10-31 23:03:23 +0100 | <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 |
2021-10-31 23:03:29 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 23:03:31 +0100 | <dartford> | how deep it is, being what im calling position |
2021-10-31 23:04:39 +0100 | <dartford> | ahhh |
2021-10-31 23:04:55 +0100 | <dartford> | yeah its quite reasonable im concerned, a pair is essentially a length restricted list |
2021-10-31 23:05:13 +0100 | <dartford> | im used to always being able to say "go down a bit, go along a bit, go down a bit more" etc |
2021-10-31 23:05:21 +0100 | <dartford> | but with a pair there is no "going along a bit" |
2021-10-31 23:05:35 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) |
2021-10-31 23:05:40 +0100 | <dartford> | i suppose if i have extent restricted layers, it would just throw a type error if i tried to "go along" |
2021-10-31 23:05:42 +0100 | nickkkkk_all | (~nick_all@139.102.124.132) (Ping timeout: 260 seconds) |
2021-10-31 23:05:45 +0100 | <dartford> | on the Int level |
2021-10-31 23:06:10 +0100 | <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. |
2021-10-31 23:06:30 +0100 | <hololeap> | I think Data.Tree (rose trees) would model an n-dimensional cartesian domain just fine, wouldn't they? |
2021-10-31 23:06:31 +0100 | <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 |
2021-10-31 23:06:50 +0100 | dsal | goes to play with chainsaws instead |
2021-10-31 23:06:53 +0100 | lavaman | (~lavaman@98.38.249.169) |
2021-10-31 23:07:31 +0100 | <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" |
2021-10-31 23:07:43 +0100 | <dartford> | see what i mean... |
2021-10-31 23:07:49 +0100 | <dartford> | "no, we dont" |
2021-10-31 23:08:03 +0100 | <dartford> | and im like "dsal, wait for me, i want to play too" |
2021-10-31 23:08:11 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) (Ping timeout: 264 seconds) |
2021-10-31 23:08:27 +0100 | <dartford> | hololeap: this is the theorem |
2021-10-31 23:08:34 +0100 | <dartford> | all is trees |
2021-10-31 23:08:36 +0100 | zebrag | (~chris@user/zebrag) (Remote host closed the connection) |
2021-10-31 23:09:00 +0100 | <dartford> | even if some of the branches are just pairs |
2021-10-31 23:09:22 +0100 | <dartford> | i guess the point is youd better remember how wide the branches are everywhere |
2021-10-31 23:09:32 +0100 | zebrag | (~chris@user/zebrag) |
2021-10-31 23:09:43 +0100 | <dartford> | which is what you get for doing away with string symbol labels, aka records |
2021-10-31 23:09:53 +0100 | <dartford> | which is what edkmet lenses use |
2021-10-31 23:10:05 +0100 | zebrag | (~chris@user/zebrag) (Remote host closed the connection) |
2021-10-31 23:10:11 +0100 | <dartford> | right, i finally said that comprehensibly |
2021-10-31 23:10:15 +0100 | <dartford> | so sorry |
2021-10-31 23:11:10 +0100 | <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 |
2021-10-31 23:11:27 +0100 | <hololeap> | trying to piece it together |
2021-10-31 23:11:47 +0100 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 264 seconds) |
2021-10-31 23:11:51 +0100 | <dartford> | one or more |
2021-10-31 23:11:55 +0100 | <dartford> | nonempty lists |
2021-10-31 23:11:59 +0100 | <dartford> | no "shaped empty" |
2021-10-31 23:12:11 +0100 | <dartford> | [[],[]] is disalowed for example |
2021-10-31 23:12:28 +0100 | <dartford> | just for the sake of it, it was a glitch i kept encountering |
2021-10-31 23:12:46 +0100 | <dartford> | hololeap |
2021-10-31 23:12:55 +0100 | <dartford> | its for probabalistic scanning |
2021-10-31 23:13:07 +0100 | <dartford> | thats why we ended up with StateL where pairs used to be |
2021-10-31 23:13:32 +0100 | <dartford> | to get the lazyness of mapAccumL |
2021-10-31 23:13:44 +0100 | <dartford> | for lazy stream transduction |
2021-10-31 23:13:49 +0100 | <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 |
2021-10-31 23:14:16 +0100 | <dartford> | no, the length of the rose trees branches can be infinite |
2021-10-31 23:14:22 +0100 | <dartford> | its not strictly infinite in depth |
2021-10-31 23:14:26 +0100 | <dartford> | it can terminate at a value |
2021-10-31 23:14:37 +0100 | <dartford> | though it can be recursive |
2021-10-31 23:14:54 +0100 | <dartford> | but thats handled slightly differently since it has to be labled, not really whats being discussed here |
2021-10-31 23:15:08 +0100 | <dartford> | we can stick to just considering scanning over a list for simplicity |
2021-10-31 23:15:17 +0100 | <dartford> | a strictly infinite stream rather |
2021-10-31 23:15:24 +0100 | <dartford> | for instance an IOList |
2021-10-31 23:15:45 +0100 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-10-31 23:16:12 +0100 | <dartford> | like, the server can just keep returning requests, no real notion of the "end of the list" |
2021-10-31 23:16:18 +0100 | <dartford> | so it *needs* to be lazy |
2021-10-31 23:16:22 +0100 | <dartford> | you *cant* use traverse |
2021-10-31 23:16:33 +0100 | <dartford> | well, unless its restricted to StateL as the applicative |
2021-10-31 23:16:42 +0100 | <dartford> | or some other "lazy applicative" |
2021-10-31 23:16:52 +0100 | <dartford> | some applicatives would force evaluation of the whole thing |
2021-10-31 23:17:07 +0100 | <dartford> | thats why i talk about mapAccumL and scanners as if they are a seperate thing to traverse |
2021-10-31 23:17:32 +0100 | <dartford> | traverse + StateL = scanners, basically |
2021-10-31 23:17:52 +0100 | <dartford> | scanners, being always lazy, form an algebra for stream transduction |
2021-10-31 23:18:10 +0100 | <dartford> | anyway, i forgot the question, i hope that clears something up at least |
2021-10-31 23:18:18 +0100 | <dartford> | i dont really want to just keep explaining that point |
2021-10-31 23:18:22 +0100 | <dartford> | but thats the central point |
2021-10-31 23:18:29 +0100 | <dartford> | about the lazy stream algebra |
2021-10-31 23:18:49 +0100 | <dartford> | offered by scanners, as a distinction from the rest of Traversable |
2021-10-31 23:19:17 +0100 | <hololeap> | I wonder if something like conduit might fit your use case |
2021-10-31 23:19:33 +0100 | <dartford> | yeah, this replaces that |
2021-10-31 23:19:41 +0100 | <dartford> | with actual theorems |
2021-10-31 23:19:45 +0100 | <dartford> | in idomatic haskell |
2021-10-31 23:19:53 +0100 | <dartford> | acording to the class hierarchy of the prelude |
2021-10-31 23:20:05 +0100 | <dartford> | scanners beat conduits! |
2021-10-31 23:20:16 +0100 | NoidedSuper | (~manjaro-u@2601:280:5a81:520::f8be) (Remote host closed the connection) |
2021-10-31 23:20:49 +0100 | burnsidesLlama | (~burnsides@dhcp168-013.wadham.ox.ac.uk) |
2021-10-31 23:21:22 +0100 | <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 |
2021-10-31 23:21:41 +0100 | <dartford> | so notionally, its as if it does one element at a time, passing it through *each* scanner applied |
2021-10-31 23:21:49 +0100 | <dartford> | as if the scanners were algebraically composed |
2021-10-31 23:22:15 +0100 | <dartford> | this compositionality being what conduit does, but in a much less direct way |
2021-10-31 23:22:43 +0100 | zebrag | (~chris@user/zebrag) |
2021-10-31 23:22:45 +0100 | <dartford> | the lazyness of StateL means mapAccumL has a rewrite rule essentially |
2021-10-31 23:23:18 +0100 | <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? |
2021-10-31 23:23:46 +0100 | <dartford> | erp, im kind of wanting to not be concerned with the "shape" of the state |
2021-10-31 23:23:56 +0100 | <dartford> | other than to say, it has a lens into the RNG seed |
2021-10-31 23:24:13 +0100 | <dartford> | so never mind about if the carry is a grid or not |
2021-10-31 23:24:31 +0100 | <dartford> | the point is that whatever the carry is, it should have part of it be the seed |
2021-10-31 23:24:40 +0100 | <dartford> | so that the update function can be probablistic |
2021-10-31 23:24:47 +0100 | <dartford> | . |
2021-10-31 23:25:26 +0100 | <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 |
2021-10-31 23:26:47 +0100 | MQ-17J | (~MQ-17J@8.6.144.203) (Ping timeout: 264 seconds) |
2021-10-31 23:27:05 +0100 | <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 |
2021-10-31 23:28:09 +0100 | proboscis | (~proboscis@14.137.28.197) |
2021-10-31 23:30:11 +0100 | <dartford> | essentially commuting part of it into the pair and back again, as in a getter and a setter of the van larhoven lens |
2021-10-31 23:30:17 +0100 | <dartford> | yeah "i can lens into the seed" |
2021-10-31 23:30:21 +0100 | <dartford> | being the spec |
2021-10-31 23:30:33 +0100 | <dartford> | i get that this library seems to achieve this |
2021-10-31 23:30:55 +0100 | <dartford> | but i just want to use StateL and Compose, so i preserve the lazyness of its applicative when used with traverse |
2021-10-31 23:31:00 +0100 | <dartford> | you understand this part? |
2021-10-31 23:31:17 +0100 | <dartford> | the lazy compositionality of StateL? |
2021-10-31 23:31:23 +0100 | <dartford> | for the scanner... |
2021-10-31 23:31:33 +0100 | <dartford> | its all about that applicative instance |
2021-10-31 23:31:41 +0100 | <dartford> | to give something like mapAccumL |
2021-10-31 23:31:49 +0100 | MQ-17J | (~MQ-17J@d192-24-122-179.try.wideopenwest.com) |
2021-10-31 23:32:08 +0100 | <dartford> | otherwise i dont get my rewrite rule that expresses the algebra |
2021-10-31 23:32:11 +0100 | proboscis | (~proboscis@14.137.28.197) (Ping timeout: 245 seconds) |
2021-10-31 23:32:51 +0100 | <hololeap> | what is StateL? Control.Monad.State.Lazy? |
2021-10-31 23:33:11 +0100 | <dartford> | L for left |
2021-10-31 23:33:16 +0100 | <dartford> | :t mapAccumL |
2021-10-31 23:33:17 +0100 | <lambdabot> | Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2021-10-31 23:33:26 +0100 | <dartford> | no good traversing from the right in an infinite stream! |
2021-10-31 23:33:37 +0100 | <dartford> | so yeah, maybe left and lazy are synonimous in this case |
2021-10-31 23:33:42 +0100 | <dartford> | not sure what module its in, sorry |
2021-10-31 23:33:59 +0100 | <dartford> | oh, its herer |
2021-10-31 23:34:00 +0100 | <dartford> | https://hackage.haskell.org/package/base-4.16.0.0/docs/src/Data.Functor.Utils.html#StateL |
2021-10-31 23:34:18 +0100 | son0p- | (~ff@181.136.122.143) |
2021-10-31 23:34:32 +0100 | <dartford> | right above the all essential applicative instance |
2021-10-31 23:34:40 +0100 | <hololeap> | oh, that's new. I don't have that in my base |
2021-10-31 23:34:55 +0100 | <dartford> | well, you dont need it if you use scanners |
2021-10-31 23:35:08 +0100 | <dartford> | basically you wouldnt be using traverse in the streaming setting |
2021-10-31 23:35:12 +0100 | <dartford> | it would be dangerous to |
2021-10-31 23:35:33 +0100 | <dartford> | should be strictly restricted to using scanners to avoid the pottential for composing with a non-lazy applicative |
2021-10-31 23:36:07 +0100 | <dartford> | but then i guess you couldnt be able to use this compose machinery to get the composed applicative instance |
2021-10-31 23:36:15 +0100 | <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? |
2021-10-31 23:36:20 +0100 | <dartford> | but then, the scanner implementation makes do without that anyway.. |
2021-10-31 23:36:38 +0100 | <dartford> | huh, IO in the monad transformer stack |
2021-10-31 23:36:40 +0100 | <dartford> | yeah |
2021-10-31 23:36:41 +0100 | <dartford> | could be |
2021-10-31 23:36:57 +0100 | <dartford> | but, can be avoided, like, using a carried seed instead of an IO RNG. |
2021-10-31 23:37:01 +0100 | <dartford> | its determanistic then too |
2021-10-31 23:37:07 +0100 | <dartford> | important for reproducability |
2021-10-31 23:37:08 +0100 | proboscis | (~proboscis@14.137.28.197) |
2021-10-31 23:37:24 +0100 | <dartford> | theres a link to a github for the scanners over IOList if you like i can find it |
2021-10-31 23:37:39 +0100 | <dartford> | but really i just want to use a pure infinite list |
2021-10-31 23:37:47 +0100 | <dartford> | to avoid the additional complexity |
2021-10-31 23:37:54 +0100 | <dartford> | and any pottential for runtime errors |
2021-10-31 23:38:12 +0100 | <hololeap> | if it runs indefinitely, you would not have access to any of the output unless it was emitted through IO |
2021-10-31 23:38:35 +0100 | <dartford> | scanner f (repeat ()) |
2021-10-31 23:38:38 +0100 | <dartford> | for example |
2021-10-31 23:38:47 +0100 | <dartford> | clock = repeat () |
2021-10-31 23:38:56 +0100 | <dartford> | in the IO setting you can add a thread delay |
2021-10-31 23:39:14 +0100 | <dartford> | so its more like an actual clock, but the pure versions fine |
2021-10-31 23:39:30 +0100 | <dartford> | oh yeah sure, but main being the only IO |
2021-10-31 23:39:49 +0100 | <dartford> | hmm, your right though, that puts IO into the monad stack |
2021-10-31 23:40:20 +0100 | <dartford> | it ends up like Compose IO (Compose (StateL Int) (whatever the rest of the carry is)) |
2021-10-31 23:40:46 +0100 | <dartford> | it ends up like Compose IO (Compose (StateL Int) (StateL `whatever the rest of the carry is')) |
2021-10-31 23:41:06 +0100 | machinedgod | (~machinedg@24.105.81.50) (Ping timeout: 260 seconds) |
2021-10-31 23:41:15 +0100 | <hololeap> | probably just `Compose (StateL (RandomSeed,s)) IO` |
2021-10-31 23:41:35 +0100 | <dartford> | where you can rewrite that to use just one StateL, i think like Compose IO (StateL (Int,restOfCarry)) |
2021-10-31 23:41:35 +0100 | <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 |
2021-10-31 23:42:08 +0100 | <hololeap> | because you wouldn't need arbitrary input from IO, just the ability to emit |
2021-10-31 23:42:13 +0100 | <dartford> | yeah it rewrites to what you wrote, but im not sure if the applicative instance is the same |
2021-10-31 23:42:48 +0100 | <dartford> | ahh, ok, i think i understand that consideration, so IO input could mess it up somehow? wouldnt make it not lazy though |
2021-10-31 23:42:56 +0100 | <dartford> | all the lazy streaming works in IO just fine |
2021-10-31 23:43:02 +0100 | <dartford> | well, when its an IO list |
2021-10-31 23:43:12 +0100 | <dartford> | and all the functions acting over it have option for IO too, |
2021-10-31 23:43:20 +0100 | <dartford> | im going to find the gist, hang on |
2021-10-31 23:43:48 +0100 | <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 |
2021-10-31 23:43:58 +0100 | proboscis | (~proboscis@14.137.28.197) (Ping timeout: 260 seconds) |
2021-10-31 23:43:59 +0100 | <dartford> | this version is tested working https://github.com/fog-hs/streaming-binary-files-take2/tree/master/Stream |
2021-10-31 23:44:14 +0100 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.3) |
2021-10-31 23:44:24 +0100 | <dartford> | hololeap: sorry it took so long |
2021-10-31 23:44:34 +0100 | <dartford> | i was busy |
2021-10-31 23:44:37 +0100 | <dartford> | ... |
2021-10-31 23:44:38 +0100 | <hololeap> | no worries |
2021-10-31 23:44:59 +0100 | <dartford> | try telling her that! |
2021-10-31 23:45:56 +0100 | <dartford> | anyway, its in the public domain now, so i can get hit by a bus safely without it being redacted from reality |
2021-10-31 23:46:04 +0100 | <dartford> | unless you get hit by a bus at the same time |
2021-10-31 23:46:16 +0100 | <dartford> | so we probably need to ride different buses or something |
2021-10-31 23:46:18 +0100 | <hololeap> | what if the whole world gets hit by a bus :o |
2021-10-31 23:46:21 +0100 | Gurkenglas | (~Gurkengla@dslb-002-203-144-204.002.203.pools.vodafone-ip.de) (Ping timeout: 245 seconds) |
2021-10-31 23:46:23 +0100 | <dartford> | or do more work or road safety |
2021-10-31 23:46:37 +0100 | <dartford> | hololeap: you cant crash a tesla! |
2021-10-31 23:47:03 +0100 | <dartford> | but you can spill drinks on your structured access memory |
2021-10-31 23:47:30 +0100 | <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 |
2021-10-31 23:47:32 +0100 | <dartford> | not that i can remember where i put my drink |
2021-10-31 23:47:36 +0100 | <dartford> | or my glasses! |
2021-10-31 23:48:26 +0100 | <dartford> | https://alchetron.com/cdn/professor-branestawm-3dd7e260-7142-4b63-962a-be473023b6c-resize-750.jpeg |
2021-10-31 23:48:56 +0100 | <dartford> | go on go on go on go on - its got cocain in it! |
2021-10-31 23:49:09 +0100 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-10-31 23:49:42 +0100 | <dartford> | hololeap: it will be fine, its out of my hands now |
2021-10-31 23:50:01 +0100 | fendor | (~fendor@77.119.160.25.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-10-31 23:50:14 +0100 | <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 |
2021-10-31 23:50:56 +0100 | <dartford> | aka im satisfied im off the hook, and look forwards to living in a world where more than just me knows my results |
2021-10-31 23:51:14 +0100 | <dartford> | dont worry - im not going to be taking any buses any time soon |
2021-10-31 23:51:47 +0100 | <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 |
2021-10-31 23:52:23 +0100 | zincy_ | (~zincy@2a00:23c8:970c:4801:e5fe:6e8c:c240:1bb2) (Remote host closed the connection) |
2021-10-31 23:52:26 +0100 | <dartford> | yes, your right, i totally forgot i actually quite need these probabalistic scanners up and running |
2021-10-31 23:52:32 +0100 | <dartford> | damn |
2021-10-31 23:52:45 +0100 | jinsun__ | jinsun |
2021-10-31 23:52:58 +0100 | <hololeap> | I mean, hook one up to an SDR and you might find something cool... IDK |
2021-10-31 23:53:12 +0100 | son0p- | (~ff@181.136.122.143) (Remote host closed the connection) |
2021-10-31 23:53:23 +0100 | <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 |
2021-10-31 23:54:07 +0100 | <dartford> | whats an SDR? |
2021-10-31 23:54:17 +0100 | <hololeap> | software defined radio |
2021-10-31 23:54:23 +0100 | euandreh | (~euandreh@2804:14c:33:9fe5:af93:19b0:8b26:3fa2) (Ping timeout: 260 seconds) |
2021-10-31 23:54:31 +0100 | <dartford> | yeah, and aim it at your dog |
2021-10-31 23:55:04 +0100 | <dartford> | its ok, my dog drives a tesla |
2021-10-31 23:55:19 +0100 | <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 |
2021-10-31 23:56:06 +0100 | son0p- | (~ff@181.136.122.143) |
2021-10-31 23:56:10 +0100 | <dartford> | better than hooking it up to the stock market, where there are robots evolved to conduct adversarial privacy preserving system inference and control |
2021-10-31 23:56:27 +0100 | <dartford> | optimally |
2021-10-31 23:56:42 +0100 | <dartford> | "dont use that socket!!!" ... "noooo" |
2021-10-31 23:57:05 +0100 | <dartford> | "hey, whats up with your dog, it cant trade for shit!" |
2021-10-31 23:57:23 +0100 | <dartford> | "its been hacked by trading robots!!!" |
2021-10-31 23:57:34 +0100 | <dartford> | hide your wife... |
2021-10-31 23:58:16 +0100 | <dartford> | taxi! |
2021-10-31 23:58:20 +0100 | dartford | (~dartford@176-157-77-163.abo.bbox.fr) (Quit: Connection closed) |