2021-09-09 00:03:07 +0200 | infinity0 | (~infinity0@occupy.ecodis.net) (Remote host closed the connection) |
2021-09-09 00:03:27 +0200 | cjb | (~cjb@user/cjb) (Quit: cjb) |
2021-09-09 00:04:34 +0200 | infinity0 | (~infinity0@occupy.ecodis.net) |
2021-09-09 00:04:36 +0200 | spaceshipnow | (~spaceship@65.100.53.74) |
2021-09-09 00:08:22 +0200 | infinity0 | (~infinity0@occupy.ecodis.net) (Remote host closed the connection) |
2021-09-09 00:08:24 +0200 | spaceshipnow | (~spaceship@65.100.53.74) (Client Quit) |
2021-09-09 00:08:40 +0200 | spaceshipnow | (~spaceship@65.100.53.74) |
2021-09-09 00:09:42 +0200 | infinity0 | (~infinity0@occupy.ecodis.net) |
2021-09-09 00:11:14 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 00:12:04 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 00:12:17 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 00:13:20 +0200 | __monty__ | (~toonn@user/toonn) (Quit: leaving) |
2021-09-09 00:14:19 +0200 | <shiraeeshi> | how can you do something like "type Point<T extends Num> { x: T, y: T}" in haskell? (other than adding a constraint to every function) |
2021-09-09 00:15:12 +0200 | <geekosaur> | I think you just missed that discussion: you don't |
2021-09-09 00:15:36 +0200 | cjb | (~cjb@user/cjb) |
2021-09-09 00:16:00 +0200 | <shiraeeshi> | declare a typeclass with a constraint, define functions using that typeclass and make Point an instance of it? |
2021-09-09 00:16:37 +0200 | <hpc> | there's also the matter that when you define an oop class-ish thing like that, you're only defining T in one place |
2021-09-09 00:16:49 +0200 | TranquilEcho | (~grom@user/tranquilecho) (Quit: WeeChat 2.8) |
2021-09-09 00:16:53 +0200 | <shiraeeshi> | I mean, not literally the same thing, but conceptually similar thing |
2021-09-09 00:16:54 +0200 | <monochrom> | In Haskell 98 it was "data Num a => Point a = MkPoint a a" |
2021-09-09 00:17:03 +0200 | <hpc> | all the other Ts are using that same T, so you're not universally quantifying x/y |
2021-09-09 00:17:14 +0200 | <monochrom> | It turns out to have little benefit and much cost. |
2021-09-09 00:17:45 +0200 | <monochrom> | In fact this fact is language-agnostic. In any language this misfeature has little benefit and much cost. |
2021-09-09 00:17:53 +0200 | <hpc> | then when you define something outside that class, you still need to carry the constraint around elsewhere |
2021-09-09 00:18:14 +0200 | <hpc> | type Field<T> {something: Point<T>} would be an error |
2021-09-09 00:18:32 +0200 | <hpc> | it would still have to be type Field<T extends Num> |
2021-09-09 00:18:59 +0200 | <monochrom> | It is a very attractive thing to do for control-freak authors. Gives them a comfy sense of "I am disallowing the user to do a few things!" Power trip. |
2021-09-09 00:19:10 +0200 | harveypwca | (~harveypwc@2601:246:c180:a570:2435:ba7:e573:bc26) (Quit: Leaving) |
2021-09-09 00:19:43 +0200 | lambdabot | (~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection) |
2021-09-09 00:19:55 +0200 | <geekosaur> | hm |
2021-09-09 00:19:55 +0200 | lambdabot | (~lambdabot@silicon.int-e.eu) |
2021-09-09 00:19:56 +0200 | lambdabot | (~lambdabot@silicon.int-e.eu) (Changing host) |
2021-09-09 00:19:56 +0200 | lambdabot | (~lambdabot@haskell/bot/lambdabot) |
2021-09-09 00:20:00 +0200 | <geekosaur> | oh |
2021-09-09 00:21:03 +0200 | <monochrom> | An actually wise control-freak would make the type abstract/opague and provide restrictive smart constructors to restrict users. |
2021-09-09 00:21:16 +0200 | spaceshipnow | (~spaceship@65.100.53.74) (Textual IRC Client: www.textualapp.com) |
2021-09-09 00:23:54 +0200 | <hpc> | the wisest control freak would license it agpl and then nobody would ever use it :P |
2021-09-09 00:24:11 +0200 | <monochrom> | haha |
2021-09-09 00:25:01 +0200 | <awpr> | if I understand shiraeeshi's typeclass idea correctly it literally implements abbreviating the repetitive part of the type signatures by declaring all their type parameters in one instance head. interesting idea, but IMO not better than just typing out the Num constraints |
2021-09-09 00:25:22 +0200 | <awpr> | no extra restrictions on the type / data constructor itself from that approach |
2021-09-09 00:25:49 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 00:26:09 +0200 | <hpc> | and as mentioned at the beginning of this whole thing, technically possible but an awful user experience |
2021-09-09 00:26:50 +0200 | <shiraeeshi> | so how do people solve this problem in the wild? my guess is they just use GADTs |
2021-09-09 00:27:04 +0200 | <awpr> | they just type the Num constraint on each function, generally |
2021-09-09 00:27:38 +0200 | <hpc> | ^ |
2021-09-09 00:27:48 +0200 | <monochrom> | GADT doesn't magically allow "foo x = MkPoint (x-1) (x+1); foo :: a -> Point a" |
2021-09-09 00:27:48 +0200 | <hpc> | no point in getting fancy when you could just be honest with the user |
2021-09-09 00:28:04 +0200 | <monochrom> | The type sig is still "foo :: Num a => a -> Point a" |
2021-09-09 00:28:25 +0200 | <monochrom> | "foo :: a -> Point a" is called False Advertising. |
2021-09-09 00:28:33 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 00:28:39 +0200 | <hpc> | if programmers can spend a bit of extra typing on good nicely formatted functions, they can spend a bit of extra typing on nicely formatted type signatures |
2021-09-09 00:30:54 +0200 | <monochrom> | In fact, it is the uncontrained type that saves typing in the opposite direction: "prj (MkPoint x _) = x; prj :: Point a -> a" |
2021-09-09 00:31:32 +0200 | <monochrom> | It is GADT and the constrained type that incur the redundant "prj :: Num a => Point a -> a" |
2021-09-09 00:32:04 +0200 | themc47 | mc47 |
2021-09-09 00:32:05 +0200 | <monochrom> | Once again intuition is the opposite of reality. |
2021-09-09 00:32:25 +0200 | <monochrom> | We all want to save typing. We all agree on that. |
2021-09-09 00:32:45 +0200 | <monochrom> | Intuition says "constrain the type to save typing". |
2021-09-09 00:32:55 +0200 | <awpr> | #define Point Num a => PointImpl |
2021-09-09 00:32:55 +0200 | <monochrom> | Reality says unconstrain the type to save typing. |
2021-09-09 00:32:58 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 00:33:36 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-09-09 00:33:43 +0200 | <hpc> | besides, who cares about typing anyway |
2021-09-09 00:33:49 +0200 | <hpc> | if you want to shave off characters, switch to perl |
2021-09-09 00:34:06 +0200 | <monochrom> | haha |
2021-09-09 00:35:33 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 00:37:21 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2021-09-09 00:39:33 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds) |
2021-09-09 00:40:13 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection) |
2021-09-09 00:40:19 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) |
2021-09-09 00:40:55 +0200 | Neuromancer | (~Neuromanc@user/neuromancer) (Remote host closed the connection) |
2021-09-09 00:41:08 +0200 | hololeap | (~hololeap@user/hololeap) |
2021-09-09 00:42:30 +0200 | son0p | (~ff@181.136.122.143) |
2021-09-09 00:43:30 +0200 | <janus> | Data.Map suggests (fromListWith (++)) but i am wondering if it isn't gonna have terrible performance. would it be worth it to use DList here? or something else? just in case somebody already benchmarked it[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D[D |
2021-09-09 00:45:06 +0200 | <ldlework> | I've been slowly filling this out https://gist.github.com/dustinlacewell/6cae02e3bba25ff42bebafce655498ea |
2021-09-09 00:45:44 +0200 | <int-e> | > M.fromListWith f [(0,a),(0,b),(0,c)] |
2021-09-09 00:45:45 +0200 | <lambdabot> | fromList [(0,f c (f b a))] |
2021-09-09 00:46:56 +0200 | <int-e> | janus: it's right-associative so DList should make little difference |
2021-09-09 00:47:31 +0200 | <awpr> | isn't that only if you want reversed lists? |
2021-09-09 00:47:46 +0200 | acidjnk_new | (~acidjnk@p200300d0c7203089886436e542e4e0a8.dip0.t-ipconnect.de) |
2021-09-09 00:48:32 +0200 | <awpr> | when I wrote one of these I did use DList, but fmap reverse should do pretty well, too |
2021-09-09 00:49:01 +0200 | <int-e> | awpr: or if you don't care about the order (I usually don't) |
2021-09-09 00:49:42 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2021-09-09 00:49:51 +0200 | <awpr> | yep, that too. but if you write one and stash it in a discoverable module somewhere, eventually someone will use it assuming it gives results in-order and you'll have a bug (ask me how I know) |
2021-09-09 00:50:52 +0200 | acidjnk_new3 | (~acidjnk@p200300d0c7203089886436e542e4e0a8.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
2021-09-09 00:51:42 +0200 | cjb | (~cjb@user/cjb) (Quit: cjb) |
2021-09-09 00:52:42 +0200 | <int-e> | awpr: Anyway, the question was whether fromListWith (++) is going to have terrible performance... and the answer is no. |
2021-09-09 00:52:45 +0200 | <int-e> | janus: It *does* reverse the elements though, which may come as a suprise. |
2021-09-09 00:53:36 +0200 | <int-e> | > fromList (++) [(0,"ab"),(0,"cd"),(0,"ef")] -- and of course it's messier if you don't have singleton lists |
2021-09-09 00:53:37 +0200 | <lambdabot> | error: |
2021-09-09 00:53:37 +0200 | <lambdabot> | • Variable not in scope: |
2021-09-09 00:53:37 +0200 | <lambdabot> | fromList :: ([a0] -> [a0] -> [a0]) -> [(a1, [Char])] -> t |
2021-09-09 00:53:49 +0200 | <int-e> | > M.fromList (++) [(0,"ab"),(0,"cd"),(0,"ef")] |
2021-09-09 00:53:50 +0200 | <lambdabot> | error: |
2021-09-09 00:53:50 +0200 | <lambdabot> | • Couldn't match expected type ‘[(a2, [Char])] -> t’ |
2021-09-09 00:53:50 +0200 | <lambdabot> | with actual type ‘M.Map k0 a1’ |
2021-09-09 00:53:59 +0200 | <int-e> | :-/ |
2021-09-09 00:54:02 +0200 | <int-e> | > M.fromListWith (++) [(0,"ab"),(0,"cd"),(0,"ef")] |
2021-09-09 00:54:03 +0200 | <lambdabot> | fromList [(0,"efcdab")] |
2021-09-09 00:56:04 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 00:56:50 +0200 | sleblanc | (~sleblanc@user/sleblanc) |
2021-09-09 00:57:24 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 00:57:39 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 00:57:43 +0200 | jakalx | (~jakalx@base.jakalx.net) (Error from remote client) |
2021-09-09 00:58:03 +0200 | Tuplanolla | (~Tuplanoll@91-159-69-50.elisa-laajakaista.fi) (Quit: Leaving.) |
2021-09-09 00:58:08 +0200 | <janus> | so with right-associative, you mean that it doesn't accumulate a giant string which is then appended to at the end? so because elements are prefixed as they occur, it won't need to traverse huge data |
2021-09-09 00:58:32 +0200 | <int-e> | I meant that the passed function is used in a right-associative way |
2021-09-09 00:59:48 +0200 | jakalx | (~jakalx@base.jakalx.net) |
2021-09-09 01:00:25 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 01:03:22 +0200 | amahl | (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 252 seconds) |
2021-09-09 01:06:19 +0200 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-09-09 01:06:57 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Remote host closed the connection) |
2021-09-09 01:07:09 +0200 | philpax_ | (uid516926@id-516926.lymington.irccloud.com) |
2021-09-09 01:07:27 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
2021-09-09 01:11:37 +0200 | acidjnk_new | (~acidjnk@p200300d0c7203089886436e542e4e0a8.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2021-09-09 01:12:54 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds) |
2021-09-09 01:13:15 +0200 | aarvar | (~aaron@2601:602:a080:fa0:6eb5:629b:8150:a841) (Read error: Connection reset by peer) |
2021-09-09 01:14:09 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection) |
2021-09-09 01:14:12 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 01:17:47 +0200 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Quit: Leaving.) |
2021-09-09 01:18:55 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-09-09 01:21:49 +0200 | nvmd | (~nvmd@user/nvmd) (Quit: Later, nerds.) |
2021-09-09 01:22:13 +0200 | zaquest | (~notzaques@5.128.210.178) (Remote host closed the connection) |
2021-09-09 01:22:53 +0200 | cjb | (~cjbayliss@user/cjb) |
2021-09-09 01:23:29 +0200 | zaquest | (~notzaques@5.128.210.178) |
2021-09-09 01:28:35 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
2021-09-09 01:31:32 +0200 | <iqubic> | Is there a way to get Lens to run a traversal/fold in reverse |
2021-09-09 01:32:28 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 01:33:18 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 01:34:20 +0200 | <awpr> | :t forwards . traverse . Backwards |
2021-09-09 01:34:21 +0200 | <lambdabot> | error: |
2021-09-09 01:34:22 +0200 | <lambdabot> | Variable not in scope: forwards :: (t0 a0 -> f0 (t0 b0)) -> c |
2021-09-09 01:34:22 +0200 | <lambdabot> | error: |
2021-09-09 01:34:24 +0200 | Gurkenglas | (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Ping timeout: 265 seconds) |
2021-09-09 01:34:28 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) |
2021-09-09 01:34:52 +0200 | <awpr> | :t Control.Applicative.Backwards.forwards |
2021-09-09 01:34:53 +0200 | <lambdabot> | forall k (f :: k -> *) (a :: k). Control.Applicative.Backwards.Backwards f a -> f a |
2021-09-09 01:35:33 +0200 | <awpr> | ^ that should be able to reverse a traversal, with "traverse" being the traversal to reverse |
2021-09-09 01:36:35 +0200 | <iqubic> | What I want to do is reverse the "bits" traversal. |
2021-09-09 01:36:42 +0200 | <awpr> | I didn't get it quite right, but basically wrap the thing in Backwards while giving it to the traversal and unwrap it on the way out |
2021-09-09 01:36:48 +0200 | <iqubic> | https://hackage.haskell.org/package/lens-5.0.1/docs/Data-Bits-Lens.html#v:bits |
2021-09-09 01:36:54 +0200 | <iqubic> | I see. |
2021-09-09 01:37:58 +0200 | <awpr> | :t Control.Lens.toListOf (fmap Control.Applicative.Backwards.forwards . Data.Bits.Lens.bits . fmap Control.Applicative.Backwards.Backwards) (42 :: Int) |
2021-09-09 01:37:59 +0200 | <lambdabot> | [Bool] |
2021-09-09 01:39:09 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 01:39:09 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 01:39:09 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 01:41:45 +0200 | <iqubic> | Why does that work? |
2021-09-09 01:43:04 +0200 | dextaa | (~DV@user/dextaa) (Ping timeout: 256 seconds) |
2021-09-09 01:43:13 +0200 | <awpr> | well, traversals just work by sequencing a bunch of Applicative "actions" for the values they visit, and Backwards makes them happen in reverse order, so putting the two together makes the traversal happen in reverse |
2021-09-09 01:46:55 +0200 | <iqubic> | I see. |
2021-09-09 01:51:16 +0200 | <iqubic> | awpr: The issue is that I have the bits traversal in the middle of a longer pipeline. I'm not sure how to reverse just the bits traversal. |
2021-09-09 01:53:01 +0200 | <awpr> | you can probably factor that traversal-reversing thing into a function "reverseTraversal :: Traversal s t a b -> Traversal s t a b" and then say "x . y . reverseTraversal bits . z . w" |
2021-09-09 01:53:02 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection) |
2021-09-09 01:53:43 +0200 | phma | (~phma@host-67-44-208-98.hnremote.net) (Read error: Connection reset by peer) |
2021-09-09 01:54:12 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.250) (Ping timeout: 265 seconds) |
2021-09-09 01:54:55 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds) |
2021-09-09 01:56:13 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-09-09 01:56:55 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-09-09 01:57:05 +0200 | janat08 | (uid374565@id-374565.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-09 01:58:21 +0200 | aegon | (~mike@174.127.249.180) |
2021-09-09 02:01:17 +0200 | phma | (~phma@host-67-44-208-177.hnremote.net) |
2021-09-09 02:02:40 +0200 | cptaffe | (~connor@2600:1700:f08:1110:c843:5621:bfb6:7631) (Ping timeout: 252 seconds) |
2021-09-09 02:05:07 +0200 | <ldlework> | What's that trick for looking up all functions of the same type? |
2021-09-09 02:05:11 +0200 | <ldlework> | @hoogle (a -> b -> b) -> a -> b |
2021-09-09 02:05:12 +0200 | <lambdabot> | No results found |
2021-09-09 02:05:36 +0200 | <Axman6> | @djinn (a -> b -> b) -> a -> b |
2021-09-09 02:05:37 +0200 | <lambdabot> | -- f cannot be realized. |
2021-09-09 02:06:34 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-09-09 02:06:57 +0200 | <iqubic> | ldlework: hoogle is the right tool to use. But it looks like there aren't any functons of that type. |
2021-09-09 02:07:04 +0200 | <ldlework> | I see |
2021-09-09 02:07:32 +0200 | <ldlework> | @hoogle (a -> b -> (a, b)) -> a -> b |
2021-09-09 02:07:33 +0200 | <lambdabot> | No results found |
2021-09-09 02:07:33 +0200 | <geekosaur> | how would that function work? |
2021-09-09 02:08:02 +0200 | <iqubic> | Which actually makes sense, because there's no way to get a value of type `b` to return. The only way to possibly get a `b`, is to use the first function, but that requires you to have `b` in the first place. |
2021-09-09 02:08:04 +0200 | <Axman6> | :t \f a -> let q = f a q in q |
2021-09-09 02:08:05 +0200 | <lambdabot> | (t1 -> t2 -> t2) -> t1 -> t2 |
2021-09-09 02:08:12 +0200 | <Axman6> | nailed it! |
2021-09-09 02:08:56 +0200 | <Axman6> | see above :) |
2021-09-09 02:09:23 +0200 | <iqubic> | Oh, hey, that's like fix, but you're passing in the same 'a' as input to the function 'f' in each call. |
2021-09-09 02:09:26 +0200 | <Axman6> | > let foo = \f a -> let q = f a q in q in foo (1:) |
2021-09-09 02:09:27 +0200 | <lambdabot> | error: |
2021-09-09 02:09:27 +0200 | <lambdabot> | • Couldn't match type ‘[a]’ with ‘t -> t’ |
2021-09-09 02:09:27 +0200 | <lambdabot> | Expected type: [a] -> t -> t |
2021-09-09 02:09:35 +0200 | <Axman6> | > let foo = \f a -> let q = f a q in q in foo (:) 1 |
2021-09-09 02:09:37 +0200 | <lambdabot> | [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... |
2021-09-09 02:09:56 +0200 | <Axman6> | not only does it exist, it may actually be useful! |
2021-09-09 02:10:00 +0200 | <iqubic> | > fix (:1) |
2021-09-09 02:10:03 +0200 | <lambdabot> | error: |
2021-09-09 02:10:03 +0200 | <lambdabot> | • Occurs check: cannot construct the infinite type: a ~ [a] |
2021-09-09 02:10:03 +0200 | <lambdabot> | Expected type: [a] -> [a] |
2021-09-09 02:10:07 +0200 | <iqubic> | :t fix |
2021-09-09 02:10:07 +0200 | <Axman6> | For some definition of useful |
2021-09-09 02:10:08 +0200 | <lambdabot> | (a -> a) -> a |
2021-09-09 02:10:17 +0200 | <Axman6> | you want (1:) |
2021-09-09 02:10:27 +0200 | <iqubic> | > fix (1:) |
2021-09-09 02:10:28 +0200 | <lambdabot> | [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1... |
2021-09-09 02:10:50 +0200 | <Axman6> | > let foo = \f a -> let q = f a q in q in foo (\x xs -> x: map (+1) xs) 1 |
2021-09-09 02:10:52 +0200 | <lambdabot> | [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,... |
2021-09-09 02:11:25 +0200 | <iqubic> | @let foo = \f a -> let q = f a q in q |
2021-09-09 02:11:26 +0200 | <lambdabot> | Defined. |
2021-09-09 02:11:44 +0200 | <iqubic> | foo (\x xs -> x: map (+1) xs) 1 |
2021-09-09 02:11:52 +0200 | <iqubic> | > foo (\x xs -> x: map (+1) xs) 1 |
2021-09-09 02:11:54 +0200 | <lambdabot> | [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,... |
2021-09-09 02:11:58 +0200 | <iqubic> | There we are. |
2021-09-09 02:12:28 +0200 | <Axman6> | :t \f a = fix (f a) |
2021-09-09 02:12:29 +0200 | <lambdabot> | error: parse error on input ‘=’ |
2021-09-09 02:12:35 +0200 | <Axman6> | :t \f a -> fix (f a) |
2021-09-09 02:12:36 +0200 | <lambdabot> | (t -> a -> a) -> t -> a |
2021-09-09 02:13:12 +0200 | pzanco | (~Android@187.104.158.159) |
2021-09-09 02:13:24 +0200 | cheater | (~Username@user/cheater) (Remote host closed the connection) |
2021-09-09 02:13:52 +0200 | pzanco | (~Android@187.104.158.159) (Client Quit) |
2021-09-09 02:14:33 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
2021-09-09 02:15:34 +0200 | <iqubic> | > head $ foo (\x xs -> x: map (+1) xs) 1 |
2021-09-09 02:15:36 +0200 | <lambdabot> | 1 |
2021-09-09 02:17:45 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 02:17:59 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 02:19:10 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
2021-09-09 02:20:53 +0200 | cheater | (~Username@user/cheater) |
2021-09-09 02:20:54 +0200 | <iqubic> | awpr: Actually, it turns out that there's just a backwards function in Lens. So I can just use the traversal of "backwards bits" to run it backwards for me. |
2021-09-09 02:21:19 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 02:21:36 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 02:21:41 +0200 | <awpr> | iqubic: oh neat, I was thinking it'd be a nice thing to have in lens. good to know it's already there |
2021-09-09 02:22:27 +0200 | <iqubic> | And the implementation is basically a more optimized version of exactly what you suggested. |
2021-09-09 02:22:40 +0200 | <awpr> | yep, was just typing that :) |
2021-09-09 02:23:45 +0200 | Codaraxis | (~Codaraxis@user/codaraxis) |
2021-09-09 02:24:52 +0200 | acarrico | (~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) |
2021-09-09 02:28:35 +0200 | pbrisbin | (~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) (Ping timeout: 252 seconds) |
2021-09-09 02:32:14 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds) |
2021-09-09 02:33:05 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 02:33:19 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 02:34:37 +0200 | luc03 | (~a@p200300ef970830a990422b88d9bc8098.dip0.t-ipconnect.de) (Ping timeout: 245 seconds) |
2021-09-09 02:34:41 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 02:34:59 +0200 | luc03 | (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) |
2021-09-09 02:42:34 +0200 | abraham | (~abraham@191.96.121.37) (Quit: Textual IRC Client: www.textualapp.com) |
2021-09-09 03:04:08 +0200 | roboguy_ | (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) |
2021-09-09 03:05:28 +0200 | otto_s | (~user@p5b044f3a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2021-09-09 03:10:28 +0200 | hannessteffenhag | (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) |
2021-09-09 03:10:45 +0200 | neurocyte6 | (~neurocyte@user/neurocyte) |
2021-09-09 03:13:10 +0200 | neurocyte | (~neurocyte@user/neurocyte) (Ping timeout: 252 seconds) |
2021-09-09 03:13:11 +0200 | neurocyte6 | neurocyte |
2021-09-09 03:15:10 +0200 | hannessteffenhag | (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
2021-09-09 03:15:27 +0200 | dextaa | (~DV@user/dextaa) |
2021-09-09 03:22:42 +0200 | zebrag | (~chris@user/zebrag) (Quit: Konversation terminated!) |
2021-09-09 03:24:10 +0200 | xff0x | (~xff0x@port-92-195-70-241.dynamic.as20676.net) (Ping timeout: 252 seconds) |
2021-09-09 03:26:07 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:2e17:8c46:ec3d:aff1) |
2021-09-09 03:29:00 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-09-09 03:29:07 +0200 | vysn | (~vysn@user/vysn) (Ping timeout: 252 seconds) |
2021-09-09 03:29:25 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 265 seconds) |
2021-09-09 03:29:25 +0200 | proofofkeags | (~proofofke@205.209.28.54) (Ping timeout: 265 seconds) |
2021-09-09 03:30:12 +0200 | <ryantrinkle> | has anyone had an issue with lsp-mode in emacs where the first file works just fine with LSP, but any files opened later don't? |
2021-09-09 03:36:50 +0200 | thetoloachekid | (~ttk@189.147.153.136) |
2021-09-09 03:38:48 +0200 | cjb | (~cjbayliss@user/cjb) () |
2021-09-09 03:41:29 +0200 | cjb | (~cjbayliss@user/cjb) |
2021-09-09 03:42:48 +0200 | <iqubic> | Not for me. |
2021-09-09 03:43:17 +0200 | <iqubic> | I use lsp-mode with haskell and it works fine. |
2021-09-09 03:44:29 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 03:51:35 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds) |
2021-09-09 03:51:37 +0200 | alx741 | (~alx741@186.178.109.214) (Quit: alx741) |
2021-09-09 03:53:17 +0200 | cods | (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 252 seconds) |
2021-09-09 03:53:25 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 03:53:38 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 03:55:58 +0200 | sim590 | (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds) |
2021-09-09 03:59:12 +0200 | cods | (~fred@82-65-232-44.subs.proxad.net) |
2021-09-09 04:00:05 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 04:02:56 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 04:05:58 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 252 seconds) |
2021-09-09 04:06:03 +0200 | ephemient | (uid407513@id-407513.lymington.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-09 04:08:02 +0200 | FinnElija | (~finn_elij@user/finn-elija/x-0085643) |
2021-09-09 04:08:46 +0200 | sim590 | (~simon@modemcable090.207-203-24.mc.videotron.ca) |
2021-09-09 04:15:19 +0200 | td_ | (~td@94.134.91.19) (Ping timeout: 252 seconds) |
2021-09-09 04:16:39 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
2021-09-09 04:16:56 +0200 | Sgeo_ | (~Sgeo@user/sgeo) |
2021-09-09 04:17:18 +0200 | td_ | (~td@94.134.91.64) |
2021-09-09 04:17:22 +0200 | Sgeo | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-09-09 04:19:36 +0200 | <[itchyjunk]> | Hello |
2021-09-09 04:20:06 +0200 | <[itchyjunk]> | I am a noob but i watched a video on monad and it just felt like a bunch of if else... |
2021-09-09 04:20:51 +0200 | <[itchyjunk]> | is that what is happening mostly? if its integer do stuff, if not do nothing |
2021-09-09 04:21:26 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
2021-09-09 04:22:43 +0200 | <awpr> | that sounds a bit like the Monad instance of the Maybe type specifically; I suppose you could view that instance as a huge nested chain of if/else at each step, but that's an observation about Maybe, and not about the nature of Monad. |
2021-09-09 04:23:01 +0200 | <awpr> | (or Either, I suppose) |
2021-09-09 04:23:32 +0200 | thetoloachekid | (~ttk@189.147.153.136) (Ping timeout: 252 seconds) |
2021-09-09 04:24:09 +0200 | <[itchyjunk]> | Ah the computerphile video i watched did do the maybe just stuff as the example |
2021-09-09 04:24:36 +0200 | <[itchyjunk]> | Guess i'll have to find more examples to grasp what these elusive monads are! |
2021-09-09 04:25:41 +0200 | <awpr> | if you're picturing the Maybe case as a big nested if/else chain, then the (>>=) operation is about finding the innermost value at the bottom of that chain, and grafting one more if/else onto it. other Monads have "something else" in place of the if/else in that same kind of structure |
2021-09-09 04:26:49 +0200 | <enikar> | anyway, you have to learn and play with several monads. Each monads have specific defintion of the bind opertator (>>=). |
2021-09-09 04:28:35 +0200 | <awpr> | actually I guess I should have said "grafting some number of further if/elses onto it" -- it could be zero in the case of return, or many in the case of lots of >>=s |
2021-09-09 04:29:06 +0200 | sidbendu | (~sidbendu@188.252.196.5) |
2021-09-09 04:30:43 +0200 | <[itchyjunk]> | hmm |
2021-09-09 04:31:05 +0200 | <monochrom> | The list monad would look like "just infinitely many if else" if you were to trivialize it. |
2021-09-09 04:31:53 +0200 | <monochrom> | At which point, all of programming is just infinitely many if else. |
2021-09-09 04:31:57 +0200 | <[itchyjunk]> | hmm, monads satisfy identity and associativity law? |
2021-09-09 04:32:05 +0200 | <[itchyjunk]> | its a category of some sort? |
2021-09-09 04:32:40 +0200 | <[itchyjunk]> | programming does have a lot of if else |
2021-09-09 04:32:59 +0200 | <[itchyjunk]> | oh apparently it is category, not that i know much about it |
2021-09-09 04:33:00 +0200 | <awpr> | good observation, the arrows of the form "a -> m b" form a category for any Monad; it's called the Kleisli category of m |
2021-09-09 04:33:47 +0200 | <[itchyjunk]> | neat! |
2021-09-09 04:34:00 +0200 | <awpr> | and being a Monad is (from some perspective) exactly about the fact that you can take two of those Kleisli arrows and compose them |
2021-09-09 04:34:20 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
2021-09-09 04:36:25 +0200 | <Axman6> | [itchyjunk]: I quite like this article for getting an understanding of what monads actually are: https://codon.com/refactoring-ruby-with-monads it shows how several seemingly very different operations all follow the same patterns |
2021-09-09 04:37:17 +0200 | <Axman6> | I will probably be slapped for sharing it, but it's one of the better ones for demonstrating the "feel" for monads with an arguably more familliar syntax for most |
2021-09-09 04:37:18 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-09-09 04:39:22 +0200 | <[itchyjunk]> | I know very little programming/computer/math though. |
2021-09-09 04:39:24 +0200 | [itchyjunk] | reads it |
2021-09-09 04:39:30 +0200 | shiraeeshi | (~shiraeesh@46.34.206.111) (Ping timeout: 265 seconds) |
2021-09-09 04:39:55 +0200 | <Axman6> | The quick summary is that nullable values, lists and futures all commonly use a very similar pattern, which has the mathematical name "monad", but that name scares people |
2021-09-09 04:40:24 +0200 | <Axman6> | So when people say they don't understand monads, if they do any programming, they are almost guaranteed to be using them, in several different ways, every time they write code |
2021-09-09 04:40:37 +0200 | <hrnz> | when in doubt, always say "this is a category" |
2021-09-09 04:40:44 +0200 | <hrnz> | you're almost never wrong. |
2021-09-09 04:41:00 +0200 | <[itchyjunk]> | is almost a monad? |
2021-09-09 04:41:42 +0200 | <Axman6> | https://imgflip.com/i/5mcc4n |
2021-09-09 04:43:06 +0200 | <[itchyjunk]> | hmm the above comment about being able to compose the Kleisli category |
2021-09-09 04:43:19 +0200 | <[itchyjunk]> | doesn't this change the "type" of the things being worked on? |
2021-09-09 04:44:03 +0200 | <Axman6> | `Kliesli m a b` is just a fancy way of saying `a -> m b` |
2021-09-09 04:45:23 +0200 | <awpr> | sure, Monads are perfectly capable of progressing through multiple intermediate types along the way, that's what `(>>=) :: Monad m => m a -> (a -> m b) -> m b` says |
2021-09-09 04:46:02 +0200 | <awpr> | looking at it in terms of Kleisli arrows, there's just an extra argument that gets plumbed around |
2021-09-09 04:46:05 +0200 | haykam | (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
2021-09-09 04:46:23 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) |
2021-09-09 04:46:30 +0200 | <awpr> | :t (>=>) |
2021-09-09 04:46:31 +0200 | <lambdabot> | Monad m => (a -> m b) -> (b -> m c) -> a -> m c |
2021-09-09 04:47:10 +0200 | <Axman6> | % :t Cointrol.Category.(.) @Kliesli |
2021-09-09 04:47:10 +0200 | <yahb> | Axman6: ; <interactive>:1:1: error:; Not in scope: data constructor `Cointrol.Category'; No module named `Cointrol' is imported.; <interactive>:1:24: error: Not in scope: type constructor or class `Kliesli' |
2021-09-09 04:47:23 +0200 | <Axman6> | % :t Control.Category.(.) @Kleisli |
2021-09-09 04:47:23 +0200 | <yahb> | Axman6: ; <interactive>:1:1: error:; Not in scope: data constructor `Control.Category'; No module named `Control' is imported.; <interactive>:1:23: error: Not in scope: type constructor or class `Kleisli' |
2021-09-09 04:47:45 +0200 | <awpr> | parens around the fully-qualified name I think |
2021-09-09 04:47:47 +0200 | <[itchyjunk]> | hmm, so read that |
2021-09-09 04:47:49 +0200 | <geekosaur> | yes |
2021-09-09 04:49:01 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 04:49:21 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) |
2021-09-09 04:49:55 +0200 | <[itchyjunk]> | (>>=) is being defined as? (::) m of type Monad has the value (=>) m takes a and mapts it to the type (a -> m b) err |
2021-09-09 04:50:13 +0200 | <[itchyjunk]> | i am not good at reading this :( |
2021-09-09 04:51:53 +0200 | <Axman6> | I am struggling to make any sense of that sentense :( |
2021-09-09 04:51:56 +0200 | <xsperry> | Axman6, I think the disadvatage of using a language like ruby (no higher kinded types, no syntactic sugar like do) to demonstrate monads, is that the logical reaction will be "great, but what's the point?" |
2021-09-09 04:52:34 +0200 | <[itchyjunk]> | ah let me use a few more lines then |
2021-09-09 04:52:39 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Quit: WeeChat 3.2.1) |
2021-09-09 04:52:45 +0200 | <[itchyjunk]> | i am tring to read this (>>=) :: Monad m => m a -> (a -> m b) -> m b |
2021-09-09 04:53:07 +0200 | <awpr> | the key part to see is that you start with `m a` and end up with `m b`, i.e. the type evolves in accordance with the `a -> m b` function you passed in |
2021-09-09 04:53:19 +0200 | <[itchyjunk]> | (>>=) :: Monad m => this is saying (>>=) is defined as (::) m of the type Monad has the value (=>) |
2021-09-09 04:53:26 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) |
2021-09-09 04:53:27 +0200 | <Axman6> | Well, I think the next logical step is to then say "We can abstract algforithms over anything which can do that, what if you have a list of nullable values that you need to do something with if they are all not null? Or a list of futures that you want to do something with all the results? that's jusy mapM" |
2021-09-09 04:53:29 +0200 | <monochrom> | Huh, I recommend learning basic Haskell first, if you don't even know what "foo :: bar" is stating. |
2021-09-09 04:53:36 +0200 | <Axman6> | % :t mapM @[] |
2021-09-09 04:53:36 +0200 | <yahb> | Axman6: Monad m => (a -> m b) -> [a] -> m [b] |
2021-09-09 04:53:41 +0200 | <[itchyjunk]> | right, the type evolved! |
2021-09-09 04:53:58 +0200 | <monochrom> | Either that or you will have to study monads outside the context of Haskell. |
2021-09-09 04:54:36 +0200 | <Axman6> | [itchyjunk]: no... (>>=) :: Monad m => m a -> (a -> m b) -> m b says: (>>=) has type m a -> (a -> m b) -> m b for any m which is an instance of the Monad type class |
2021-09-09 04:54:58 +0200 | <Axman6> | it's (>>=) :: (Monad m) => (m a -> (a -> m b) -> m b) |
2021-09-09 04:55:44 +0200 | dtman34 | (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) (Ping timeout: 250 seconds) |
2021-09-09 04:56:08 +0200 | <[itchyjunk]> | oh |
2021-09-09 04:57:22 +0200 | sleblanc | (~sleblanc@user/sleblanc) (Ping timeout: 260 seconds) |
2021-09-09 04:59:09 +0200 | dtman34 | (~dtman34@c-73-62-246-247.hsd1.mn.comcast.net) |
2021-09-09 04:59:50 +0200 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2021-09-09 05:00:01 +0200 | haasn | (~nand@haasn.dev) (Quit: ZNC 1.7.5+deb4 - https://znc.in) |
2021-09-09 05:00:49 +0200 | <roboguy_> | % :t (<=<) |
2021-09-09 05:00:49 +0200 | <yahb> | roboguy_: ; <interactive>:1:1: error:; * Variable not in scope: <=<; * Perhaps you meant one of these: `=<<' (imported from Prelude), `<=' (imported from Prelude), `<<=' (imported from Control.Comonad) |
2021-09-09 05:00:51 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
2021-09-09 05:01:08 +0200 | <roboguy_> | % :t (Control.Monad.<=<) |
2021-09-09 05:01:08 +0200 | <yahb> | roboguy_: Monad m => (b -> m c) -> (a -> m b) -> a -> m c |
2021-09-09 05:01:26 +0200 | haasn | (~nand@haasn.dev) |
2021-09-09 05:01:30 +0200 | <roboguy_> | [itchyjunk]: ^ that is what does monadic composition |
2021-09-09 05:02:00 +0200 | <roboguy_> | ah, someone already mentioned it |
2021-09-09 05:02:54 +0200 | tddschn | (~textual@45.77.71.205) |
2021-09-09 05:03:27 +0200 | <roboguy_> | it might also be worth mentioning that the type also "changes" in standard function composition |
2021-09-09 05:04:04 +0200 | <roboguy_> | :t (.) |
2021-09-09 05:04:05 +0200 | <lambdabot> | (b -> c) -> (a -> b) -> a -> c |
2021-09-09 05:05:57 +0200 | <roboguy_> | [itchyjunk]: it might help to compare the type of (=<<) (which is just (>>=) with its arguments flipped around) to the type of the function application operator ($) |
2021-09-09 05:06:24 +0200 | <[itchyjunk]> | thanks! i'll start working on some of my basics again. this should help me with trying to learn Coq too. there i noticed the type of a theorm is it's entire proof which seemed simimlar to what happened with the type of >>= i think |
2021-09-09 05:08:45 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 05:08:58 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 05:10:29 +0200 | hololeap | (~hololeap@user/hololeap) |
2021-09-09 05:10:32 +0200 | hololeap | (~hololeap@user/hololeap) (Remote host closed the connection) |
2021-09-09 05:11:03 +0200 | hololeap | (~hololeap@user/hololeap) |
2021-09-09 05:13:28 +0200 | iqubic | (~user@2601:602:9502:c70:af68:e4d7:d422:2ae6) (Remote host closed the connection) |
2021-09-09 05:16:20 +0200 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds) |
2021-09-09 05:17:10 +0200 | gabiruh | (~gabiruh@vps19177.publiccloud.com.br) (Ping timeout: 240 seconds) |
2021-09-09 05:19:03 +0200 | gabiruh | (~gabiruh@vps19177.publiccloud.com.br) |
2021-09-09 05:27:15 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds) |
2021-09-09 05:27:23 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-09-09 05:28:34 +0200 | <justsomeguy> | Are purely functional programming languages also by necessity declarative? Is Haskell declarative? |
2021-09-09 05:33:40 +0200 | <[itchyjunk]> | based on what ive read haskell is declarative |
2021-09-09 05:34:25 +0200 | <[itchyjunk]> | whatever a function evaluates last is the value of that function or somesuch? |
2021-09-09 05:34:40 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) |
2021-09-09 05:35:52 +0200 | <dibblego> | is 2 + 2 declarative? |
2021-09-09 05:35:54 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Quit: Leaving) |
2021-09-09 05:36:31 +0200 | <jle`> | justsomeguy: it's sort of a loaded question to ask if a "language" is declarative, but haskell does make declarative programming easy under some common definitions of declarative programming |
2021-09-09 05:37:12 +0200 | <jle`> | but haskell does make imperative programming pretty easy too |
2021-09-09 05:39:54 +0200 | hgolden | (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Quit: Konversation terminated!) |
2021-09-09 05:48:44 +0200 | tddschn | (~textual@45.77.71.205) (Quit: My MacBook has gone to sleep. ZZZzzz…) |
2021-09-09 05:49:04 +0200 | <roboguy_> | it usually feels to me like it's hard to give a specific, concrete definition of "declarative" that will satisfy most people. Maybe there's one I'm missing, though |
2021-09-09 05:49:41 +0200 | <justsomeguy> | I've gone back and forth on the issue a few times. I think I should probably collect a bunch of examples of Haskell code where I had or did not have to think about the control flow. |
2021-09-09 05:51:57 +0200 | <roboguy_> | is thinking about control flow fundamentally non-declarative? |
2021-09-09 05:53:26 +0200 | <justsomeguy> | Wikipedia says "In computer science, declarative programming is a programming paradigm—a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow." I'm not sure if that makes sense, though. |
2021-09-09 05:54:21 +0200 | <justsomeguy> | I've seen a few conflicting definitions of declarative programming in the wild. |
2021-09-09 05:56:02 +0200 | <roboguy_> | hmm, could make sense. I think I see the point of that definition, but I'm not fully sure. I don't really think I know the answer to my question |
2021-09-09 05:58:44 +0200 | slowButPresent | (~slowButPr@user/slowbutpresent) (Quit: leaving) |
2021-09-09 05:59:15 +0200 | <jle`> | even if we agreed on a definition for the sake of this discussion, "is haskell declarative" is still tricky to answer. esp if you consider declarative as the "opposite" of imperative, in which case haskell is pretty well-suited for both, and most of the haskell code i wrote is imperative |
2021-09-09 06:00:07 +0200 | pavonia | (~user@user/siracusa) (Quit: Bye!) |
2021-09-09 06:00:14 +0200 | <jle`> | *write |
2021-09-09 06:01:24 +0200 | <jle`> | conal elliot has a nice term that i think may be more useful -- "denotative programming", where a program is assembled from pure functions on simple units of meaning with well-defined ways they combine |
2021-09-09 06:01:45 +0200 | <ldlework> | I am recently learning Haskell and FP; Is there a better design for this kind of thing? |
2021-09-09 06:01:46 +0200 | <ldlework> | https://gist.github.com/dustinlacewell/d4d3fdf5269c3355df509a37a92a62db |
2021-09-09 06:02:08 +0200 | <jle`> | and imperative programming in haskell does sort of fit that general description, in a way that it doesn't in other languages |
2021-09-09 06:03:06 +0200 | tddschn | (~textual@45.77.71.205) |
2021-09-09 06:03:32 +0200 | <jle`> | ldlework: you can avoid the partial let-binding with a pattern match in your main case |
2021-09-09 06:03:41 +0200 | <jle`> | capSentences' (Work (Just (c:i')) o s) = |
2021-09-09 06:03:54 +0200 | <ldlework> | Ah good catch |
2021-09-09 06:04:05 +0200 | <ldlework> | I guess I'm mostly asking about the act of constructing such a "work state" object |
2021-09-09 06:04:19 +0200 | <jle`> | so the if can be a guard too, but you can also pattern match on '.' directly :) |
2021-09-09 06:04:21 +0200 | <ldlework> | And then writing a custom function to essentially "flatten" (?) the object until the work is complete |
2021-09-09 06:04:30 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) |
2021-09-09 06:04:39 +0200 | <ldlework> | jle`: oh nice, good idea |
2021-09-09 06:05:46 +0200 | <jle`> | mk, looking at the overall structure and control flow |
2021-09-09 06:06:02 +0200 | <jle`> | the recursion pattern here is essentially mapAccumL |
2021-09-09 06:06:51 +0200 | <ldlework> | looking |
2021-09-09 06:06:51 +0200 | <jle`> | so you can use mapAccumL (or 'traverse' under State) and implement it with the right higher-order function to pass to it |
2021-09-09 06:06:53 +0200 | <jle`> | https://hackage.haskell.org/package/base-4.15.0.0/docs/Data-List.html#v:mapAccumL |
2021-09-09 06:07:07 +0200 | <jle`> | mapAccumL basically handles the pattern matching for you on the items left in the list |
2021-09-09 06:07:31 +0200 | <jle`> | and assembling an output list |
2021-09-09 06:08:04 +0200 | ubert | (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) |
2021-09-09 06:09:04 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-09 06:09:09 +0200 | <ldlework> | I updated the implementation to use pattern matching |
2021-09-09 06:09:11 +0200 | <ldlework> | https://gist.github.com/dustinlacewell/d4d3fdf5269c3355df509a37a92a62db |
2021-09-09 06:09:19 +0200 | <ldlework> | pretty nifty |
2021-09-09 06:09:59 +0200 | <ldlework> | jle`: if it's not too much to ask, would you mind showing a "cap the sentences" example using mapAccumL ? |
2021-09-09 06:10:08 +0200 | <jle`> | oh yeah, assembling a list like o ++ [blah] has ... very unfavorable/unexpected inefficiency (O(n^2)) |
2021-09-09 06:10:31 +0200 | ubert | (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) (Client Quit) |
2021-09-09 06:10:43 +0200 | <ldlework> | is there a better way to add a character to the end of a string? |
2021-09-09 06:10:47 +0200 | <jle`> | so people often assemble the list backwards (blah : o) and reverse at the end, or use fancy continuation tricks like difflists |
2021-09-09 06:10:47 +0200 | ubert | (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) |
2021-09-09 06:10:57 +0200 | <ldlework> | mm |
2021-09-09 06:11:25 +0200 | <jle`> | er, maybe i made difflists seem more complicated than they are, it's basically just assembling a list using `DList a` instead of `[a]` and converting back in the end |
2021-09-09 06:11:32 +0200 | <jle`> | but mapAccumL handles this for you already |
2021-09-09 06:12:04 +0200 | <jle`> | nice new patterns, pretty clean :) |
2021-09-09 06:13:25 +0200 | <ldlework> | jle`: I updated it with the reversal advice |
2021-09-09 06:13:32 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
2021-09-09 06:13:42 +0200 | <jle`> | the idea of using mapAccumL instaed of direct recursion is the idea that explicitly writing recursion is usually pretty bug-prone (it's basically goto), so when you can, you identify that the specific pattern of recursion you are using is (hopefully) common, and use a higher-order function (like, foldr or map) to write it instead, and hopefully be more readable too |
2021-09-09 06:14:25 +0200 | <jle`> | in this case you are assembling a new list from an old list by applying a "mapping function" to each item, but that mapping function keeps a state (the Bool) |
2021-09-09 06:15:11 +0200 | <jle`> | but mapAccumL is sort of on the borderline of the readability tradeoff tbh, it doesn't hit that sweet spot like foldr or map does really |
2021-09-09 06:15:25 +0200 | <jle`> | um let me see if i can squeeze your logic into mapAccumL |
2021-09-09 06:15:41 +0200 | ubert | (~Thunderbi@178.115.77.119.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 06:18:06 +0200 | cods | (~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 265 seconds) |
2021-09-09 06:20:36 +0200 | <jle`> | ldlework: i've added it as a comment -- https://gist.github.com/dustinlacewell/d4d3fdf5269c3355df509a37a92a62db#gistcomment-3887148 |
2021-09-09 06:20:57 +0200 | <jle`> | tried to use the same variable names and stuff as your example so you can identify what parts went where |
2021-09-09 06:21:48 +0200 | <ldlework> | that's awesome |
2021-09-09 06:23:28 +0200 | <jle`> | again mapAccumL is just recursion, in the end, like your example, and isn't toooo different i think. it's just usually nice to piggyback off of a higher-order function if the pattern you are using is already common |
2021-09-09 06:23:28 +0200 | hyiltiz | (~quassel@31.220.5.250) (Ping timeout: 252 seconds) |
2021-09-09 06:23:46 +0200 | tddschn | (~textual@45.77.71.205) (Quit: tddschn) |
2021-09-09 06:24:06 +0200 | <jle`> | oh oof the implementation in the source is pretty opaque |
2021-09-09 06:24:18 +0200 | <jle`> | @src mapAccumL |
2021-09-09 06:24:18 +0200 | <lambdabot> | mapAccumL _ s [] = (s, []) |
2021-09-09 06:24:18 +0200 | <lambdabot> | mapAccumL f s (x:xs) = (s'',y:ys) |
2021-09-09 06:24:18 +0200 | <lambdabot> | where (s', y ) = f s x |
2021-09-09 06:24:18 +0200 | <lambdabot> | (s'',ys) = mapAccumL f s' xs |
2021-09-09 06:24:22 +0200 | tddschn | (~textual@45.77.71.205) |
2021-09-09 06:24:35 +0200 | <jle`> | that one is a little more readabl |
2021-09-09 06:25:54 +0200 | <ldlework> | I wish the documentation used semantic names for variables |
2021-09-09 06:26:03 +0200 | <ldlework> | a and b are a bit ambiguous if you're not already familiar |
2021-09-09 06:26:17 +0200 | <ldlework> | mapAccumL :: Traversable t => (a -> b -> (a, c)) -> a -> t b -> (a, t c) |
2021-09-09 06:26:22 +0200 | <ldlework> | In the first param, the function |
2021-09-09 06:26:30 +0200 | <ldlework> | is a the accumulated state, or b? |
2021-09-09 06:26:52 +0200 | <jle`> | ah yeah, it's a little tough to read when you first see the function |
2021-09-09 06:27:03 +0200 | <jle`> | might be easier to specialize to list |
2021-09-09 06:27:04 +0200 | <ldlework> | Which is it? :P |
2021-09-09 06:27:05 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2) |
2021-09-09 06:27:13 +0200 | <jle`> | mapAccum: :: (a -> b -> (a, c)) -> a -> [b] -> (a, [c]) |
2021-09-09 06:27:19 +0200 | <jle`> | so you can see that b is the items in the original list |
2021-09-09 06:27:31 +0200 | <jle`> | and c is the items in the output list |
2021-09-09 06:27:58 +0200 | <jle`> | it is kind of a pet peeve/annoyance to me that the functions in Data.List are not specialized to lists |
2021-09-09 06:29:28 +0200 | <janus> | were they formerly specialized? i thought the policy was to generalize if possible. if that is the case, it would explain why they are generalized now |
2021-09-09 06:29:50 +0200 | <jle`> | usually the convention is to provide the specialized functions with the typeclass's modules |
2021-09-09 06:30:18 +0200 | <jle`> | so Data.Traversable would have the Traversable t => .. functions |
2021-09-09 06:30:30 +0200 | <jle`> | and then if you want the specialized functions you would import the module with the data type |
2021-09-09 06:30:35 +0200 | <jle`> | so Data.List would have the [a] functions |
2021-09-09 06:31:32 +0200 | <awpr> | one benefit to that approach is that you can sometimes help type inference by using `L.length` instead of `length` |
2021-09-09 06:31:54 +0200 | <awpr> | otherwise you're stuck with what, TypeApplications or explicit type signature annotations? |
2021-09-09 06:32:01 +0200 | hyiltiz | (~quassel@31.220.5.250) |
2021-09-09 06:32:19 +0200 | <ldlework> | jle Why isn't https://gist.github.com/dustinlacewell/30f077fc00dcecec6fdac19647f4e40f working? |
2021-09-09 06:32:46 +0200 | <jle`> | awpr: yup, it's especially disastrious in pedagogical situations (like this one) |
2021-09-09 06:33:02 +0200 | <awpr> | it might also help readers to use the most specific version possible, since seeing `List.length` tells you immediately the input is a list rather than some other arbitrary `Foldable` (if modules export specialized functions) |
2021-09-09 06:33:11 +0200 | <jle`> | ldlework: what is the error? |
2021-09-09 06:33:24 +0200 | <ldlework> | I added it as a comment |
2021-09-09 06:33:34 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 06:34:05 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 06:34:06 +0200 | <jle`> | hm, does your environment print that out as a formatted error message? |
2021-09-09 06:34:19 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 06:34:22 +0200 | <jle`> | or does it come in a json blob like that |
2021-09-09 06:34:29 +0200 | <ldlework> | added as comment |
2021-09-09 06:34:36 +0200 | <ldlework> | it's vscode, just used the wrong copy function |
2021-09-09 06:35:05 +0200 | <jle`> | ah yeah, hopefully that one is more readable. it's saying that `mapAccumL capper True` is String -> (Bool, String) |
2021-09-09 06:35:14 +0200 | <jle`> | transforms a string to a new string, with Bool state |
2021-09-09 06:35:25 +0200 | <jle`> | but the type signature you gave for it is String -> (Bool, Char) |
2021-09-09 06:35:31 +0200 | <jle`> | transforming a string into a ... char? |
2021-09-09 06:35:37 +0200 | <ldlework> | I see |
2021-09-09 06:36:10 +0200 | <jle`> | so it's a mismatch between the type of the code you wrote and the type annotation you gave it |
2021-09-09 06:36:23 +0200 | <ldlework> | makes sense |
2021-09-09 06:37:25 +0200 | <ldlework> | jle`: https://gist.github.com/dustinlacewell/d7d0b76645b8720289024dc711027474 |
2021-09-09 06:37:38 +0200 | <ldlework> | I think my implementation is slightly more terse than yours hehe |
2021-09-09 06:37:58 +0200 | <ldlework> | thanks to capturing two cases under `otherwise` |
2021-09-09 06:38:09 +0200 | <ldlework> | I really appreciate your help |
2021-09-09 06:38:11 +0200 | <jle`> | nice :) |
2021-09-09 06:38:32 +0200 | <jle`> | np! |
2021-09-09 06:39:51 +0200 | <janus> | getting ptsd from looking at the clippy avata |
2021-09-09 06:39:55 +0200 | <janus> | :P |
2021-09-09 06:40:16 +0200 | <ldlework> | haha |
2021-09-09 06:40:21 +0200 | <ldlework> | i modeled it in blender! |
2021-09-09 06:41:12 +0200 | <janus> | wow, good job. blender is awesome |
2021-09-09 06:41:30 +0200 | <jle`> | ooh, definitely impressive |
2021-09-09 06:42:43 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 06:43:15 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 06:44:17 +0200 | <ldlework> | blender is definitely awesome |
2021-09-09 06:47:26 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 06:47:38 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 06:51:14 +0200 | tddschn | (~textual@45.77.71.205) (Remote host closed the connection) |
2021-09-09 06:54:26 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 06:54:45 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 06:56:14 +0200 | tddschn | (~textual@45.77.71.205) |
2021-09-09 06:56:24 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.242) |
2021-09-09 06:58:49 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) |
2021-09-09 06:59:10 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds) |
2021-09-09 07:01:30 +0200 | iqubic | (~user@2601:602:9502:c70:17b6:d303:f703:d0d7) |
2021-09-09 07:01:41 +0200 | mishugana | (~mishugana@user/mishugana) |
2021-09-09 07:02:05 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.242) (Ping timeout: 265 seconds) |
2021-09-09 07:02:18 +0200 | <mishugana> | Hello folks, is LYAH still relevant? |
2021-09-09 07:02:28 +0200 | <mishugana> | Meaning outdated/updated/abandoned? |
2021-09-09 07:03:40 +0200 | roboguy_ | (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) () |
2021-09-09 07:03:54 +0200 | tddschn | (~textual@45.77.71.205) (Remote host closed the connection) |
2021-09-09 07:05:08 +0200 | tddschn | (~textual@45.77.71.205) |
2021-09-09 07:06:46 +0200 | tddschn | (~textual@45.77.71.205) (Remote host closed the connection) |
2021-09-09 07:06:48 +0200 | mishugana | (~mishugana@user/mishugana) (Quit: leaving) |
2021-09-09 07:07:26 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 07:07:42 +0200 | hannessteffenhag | (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) |
2021-09-09 07:08:26 +0200 | <janus> | i don't think it is updated but i also don't think it is outdated :P |
2021-09-09 07:08:29 +0200 | <ldlework> | Is there a !! for tuples |
2021-09-09 07:09:00 +0200 | <ldlework> | actually nm |
2021-09-09 07:10:35 +0200 | cods | (~fred@82-65-232-44.subs.proxad.net) |
2021-09-09 07:14:46 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 07:15:00 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 07:15:49 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-09-09 07:16:14 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-09 07:17:48 +0200 | aman | (~aman@user/aman) |
2021-09-09 07:21:51 +0200 | Sgeo_ | (~Sgeo@user/sgeo) (Read error: Connection reset by peer) |
2021-09-09 07:23:47 +0200 | oxide | (~lambda@user/oxide) |
2021-09-09 07:24:02 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.250) |
2021-09-09 07:25:17 +0200 | fendor | (~fendor@178.165.191.44.wireless.dyn.drei.com) |
2021-09-09 07:25:56 +0200 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) |
2021-09-09 07:27:47 +0200 | tomku | (~tomku@user/tomku) (Ping timeout: 252 seconds) |
2021-09-09 07:34:38 +0200 | hannessteffenhag | (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds) |
2021-09-09 07:37:43 +0200 | zmt00 | (~zmt00@user/zmt00) (Ping timeout: 252 seconds) |
2021-09-09 07:38:14 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 252 seconds) |
2021-09-09 07:38:32 +0200 | cjb | (~cjbayliss@user/cjb) (Ping timeout: 260 seconds) |
2021-09-09 07:39:17 +0200 | sm2n | (~sm2n@user/sm2n) (Ping timeout: 245 seconds) |
2021-09-09 07:40:14 +0200 | rekahsoft | (~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds) |
2021-09-09 07:41:38 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2021-09-09 07:43:05 +0200 | hannessteffenhag | (~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) |
2021-09-09 07:47:02 +0200 | aegon | (~mike@174.127.249.180) (Quit: leaving) |
2021-09-09 07:48:03 +0200 | tddschn | (~textual@45.77.71.205) |
2021-09-09 07:50:45 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.250) (Quit: mikoto-chan) |
2021-09-09 07:51:42 +0200 | Gurkenglas | (~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) |
2021-09-09 07:52:36 +0200 | gioyik | (~gioyik@gateway/tor-sasl/gioyik) |
2021-09-09 07:52:41 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 07:53:13 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 07:57:44 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 07:57:45 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 07:57:45 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 07:58:40 +0200 | ubert | (~Thunderbi@91.141.58.198.wireless.dyn.drei.com) |
2021-09-09 07:59:24 +0200 | hgolden | (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) |
2021-09-09 08:01:37 +0200 | burnsidesLlama | (~burnsides@client-8-76.eduroam.oxuni.org.uk) |
2021-09-09 08:02:06 +0200 | echoreply | (~echoreply@45.32.163.16) (Quit: WeeChat 2.8) |
2021-09-09 08:02:30 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-09-09 08:03:27 +0200 | echoreply | (~echoreply@45.32.163.16) |
2021-09-09 08:03:30 +0200 | burnsidesLlama | (~burnsides@client-8-76.eduroam.oxuni.org.uk) (Read error: Connection reset by peer) |
2021-09-09 08:03:48 +0200 | burnsidesLlama | (~burnsides@client-8-76.eduroam.oxuni.org.uk) |
2021-09-09 08:05:00 +0200 | renzhi | (~xp@2607:fa49:6500:3d00::5f4a) (Ping timeout: 256 seconds) |
2021-09-09 08:05:13 +0200 | oxide | (~lambda@user/oxide) (Ping timeout: 252 seconds) |
2021-09-09 08:05:26 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 08:06:12 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
2021-09-09 08:06:54 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-09-09 08:08:13 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 08:08:14 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 08:08:14 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 08:08:32 +0200 | burnside_ | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 08:10:23 +0200 | peterhil | (~peterhil@84.251.82.57) |
2021-09-09 08:11:14 +0200 | burnsidesLlama | (~burnsides@client-8-76.eduroam.oxuni.org.uk) (Ping timeout: 252 seconds) |
2021-09-09 08:13:08 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-09-09 08:15:04 +0200 | peterhil | (~peterhil@84.251.82.57) (Ping timeout: 265 seconds) |
2021-09-09 08:15:11 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 08:15:23 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 08:18:31 +0200 | renzhi | (~xp@modemcable070.17-177-173.mc.videotron.ca) |
2021-09-09 08:20:48 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2021-09-09 08:20:50 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-09 08:22:11 +0200 | hgolden | (~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Quit: Konversation terminated!) |
2021-09-09 08:25:22 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:5bfd:35e:da52:7e46) |
2021-09-09 08:25:44 +0200 | ub | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
2021-09-09 08:26:07 +0200 | thornAvery | (~thornAver@2401:c080:1800:4346:cb:55f4:6eab:8e22) (Ping timeout: 240 seconds) |
2021-09-09 08:27:44 +0200 | ubert | (~Thunderbi@91.141.58.198.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
2021-09-09 08:27:44 +0200 | ub | ubert |
2021-09-09 08:29:20 +0200 | tomku | (~tomku@user/tomku) |
2021-09-09 08:29:33 +0200 | qbt | (~edun@user/edun) |
2021-09-09 08:30:05 +0200 | tddschn | (~textual@45.77.71.205) (Quit: tddschn) |
2021-09-09 08:32:28 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 265 seconds) |
2021-09-09 08:33:08 +0200 | <awpr> | ldlework: to show off my new library dependent-literals / because I got nerd-sniped, I hacked together an implementation: https://github.com/google/hs-dependent-literals/blob/tuple_indexing_example/dependent-literals-plu… |
2021-09-09 08:33:09 +0200 | gioyik | (~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.1) |
2021-09-09 08:36:12 +0200 | jinsun | (~quassel@user/jinsun) (Read error: Connection reset by peer) |
2021-09-09 08:38:40 +0200 | chele | (~chele@user/chele) |
2021-09-09 08:39:10 +0200 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) |
2021-09-09 08:41:33 +0200 | burnside_ | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-09-09 08:41:36 +0200 | jinsun | (~quassel@user/jinsun) |
2021-09-09 08:41:38 +0200 | jinsun__ | (~quassel@user/jinsun) |
2021-09-09 08:42:35 +0200 | Erutuon | (~Erutuon@user/erutuon) (Ping timeout: 252 seconds) |
2021-09-09 08:43:12 +0200 | jinsun__ | (~quassel@user/jinsun) (Client Quit) |
2021-09-09 08:45:53 +0200 | sim590 | (~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds) |
2021-09-09 08:47:36 +0200 | gehmehgeh | (~user@user/gehmehgeh) |
2021-09-09 08:51:59 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
2021-09-09 08:52:10 +0200 | Vajb | (~Vajb@88.195.168.176) |
2021-09-09 09:01:03 +0200 | kuribas | (~user@ptr-25vy0i7s9yl7nzqhecr.18120a2.ip6.access.telenet.be) |
2021-09-09 09:02:28 +0200 | mc47 | (~mc47@xmonad/TheMC47) |
2021-09-09 09:04:50 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 09:05:01 +0200 | hueso | (~root@user/hueso) (Ping timeout: 250 seconds) |
2021-09-09 09:08:18 +0200 | michalz | (~michalz@185.246.204.37) |
2021-09-09 09:10:27 +0200 | monochrom | (trebla@216.138.220.146) (Quit: NO CARRIER) |
2021-09-09 09:12:06 +0200 | beka | (~beka@104.193.170.240) (Ping timeout: 265 seconds) |
2021-09-09 09:12:17 +0200 | kstuart | (~kstuart@85.203.34.2) |
2021-09-09 09:16:47 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 09:17:08 +0200 | shriekingnoise | (~shrieking@186.137.144.80) (Quit: Quit) |
2021-09-09 09:19:50 +0200 | ubert | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 09:20:55 +0200 | ubert | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
2021-09-09 09:21:30 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
2021-09-09 09:25:28 +0200 | wonko | (~wjc@62.115.229.50) |
2021-09-09 09:28:31 +0200 | jtomas | (~jtomas@95.red-88-11-64.dynamicip.rima-tde.net) |
2021-09-09 09:31:05 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection) |
2021-09-09 09:31:46 +0200 | kstuart | (~kstuart@85.203.34.2) (Remote host closed the connection) |
2021-09-09 09:34:28 +0200 | ub | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
2021-09-09 09:35:55 +0200 | zer0bitz | (~zer0bitz@dsl-hkibng31-58c384-213.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 09:38:05 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-09-09 09:43:03 +0200 | monochrom | (trebla@216.138.220.146) |
2021-09-09 09:45:26 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 09:45:42 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
2021-09-09 09:49:36 +0200 | max22- | (~maxime@2a01cb08833598007f934d16e3231d2d.ipv6.abo.wanadoo.fr) |
2021-09-09 09:50:17 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 265 seconds) |
2021-09-09 09:54:20 +0200 | Cajun | (~Cajun@user/cajun) |
2021-09-09 09:56:34 +0200 | cfricke | (~cfricke@user/cfricke) |
2021-09-09 09:58:00 +0200 | acidjnk | (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
2021-09-09 10:00:03 +0200 | <Cajun> | is there any way to stop GHCI/strings from escaping non-ascii characters? i want the output to be random garbage characters not "\159\191\242..... etc" |
2021-09-09 10:01:14 +0200 | vysn | (~vysn@user/vysn) |
2021-09-09 10:01:38 +0200 | ubert | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2021-09-09 10:01:38 +0200 | ub | ubert |
2021-09-09 10:04:13 +0200 | amahl | (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
2021-09-09 10:05:30 +0200 | benin0369323 | (~benin@183.82.178.253) (Ping timeout: 260 seconds) |
2021-09-09 10:06:53 +0200 | hendursa1 | (~weechat@user/hendursaga) |
2021-09-09 10:07:36 +0200 | <kuribas> | Cajun: what do you mean by "output"? |
2021-09-09 10:07:57 +0200 | <kuribas> | the Show instance? |
2021-09-09 10:08:27 +0200 | <Cajun> | like if my string contains special characters (idk what characters specifically) itll give me stuff like "\147\DEL\152\161" instead of the character representations |
2021-09-09 10:09:00 +0200 | <Cajun> | all operations work normally on those, i just want them to be normal instead of escaped |
2021-09-09 10:09:05 +0200 | <merijn> | Cajun: Don't use Show |
2021-09-09 10:09:21 +0200 | hendursaga | (~weechat@user/hendursaga) (Ping timeout: 276 seconds) |
2021-09-09 10:09:40 +0200 | <Cajun> | is there another good way to see the output without shoving it into some file? |
2021-09-09 10:09:48 +0200 | <merijn> | Cajun: By default ghci runs everything, including strings, through Show before, well, showing it |
2021-09-09 10:09:53 +0200 | <merijn> | Use putStrLn |
2021-09-09 10:10:03 +0200 | <Cajun> | got it, ill try that, thanks :) |
2021-09-09 10:10:18 +0200 | <merijn> | % "fooλ" |
2021-09-09 10:10:18 +0200 | <yahb> | merijn: "foo\955" |
2021-09-09 10:10:23 +0200 | <merijn> | % putStrLn "fooλ" |
2021-09-09 10:10:23 +0200 | <yahb> | merijn: fooλ |
2021-09-09 10:10:32 +0200 | <Cajun> | thats perfect :) |
2021-09-09 10:10:33 +0200 | <merijn> | Note also the absence/presence of quotes |
2021-09-09 10:11:13 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-09 10:13:46 +0200 | <kuribas> | sometimes you may want quotes though, like in logs... |
2021-09-09 10:15:06 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 10:15:11 +0200 | ishutin_ | (~ishutin@87-97-12-212.pool.digikabel.hu) |
2021-09-09 10:15:22 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 10:15:32 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
2021-09-09 10:17:45 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b))) |
2021-09-09 10:17:46 +0200 | allbery_b | (~geekosaur@xmonad/geekosaur) |
2021-09-09 10:17:49 +0200 | allbery_b | geekosaur |
2021-09-09 10:18:10 +0200 | ishutin | (~ishutin@92-249-150-146.static.digikabel.hu) (Ping timeout: 240 seconds) |
2021-09-09 10:19:43 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
2021-09-09 10:19:57 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) |
2021-09-09 10:20:05 +0200 | polyphem | (~polyphem@2a02:810d:640:776c:1bc:e34d:641e:231a) (Ping timeout: 260 seconds) |
2021-09-09 10:25:55 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:2e17:8c46:ec3d:aff1) (Ping timeout: 260 seconds) |
2021-09-09 10:26:12 +0200 | hegstal | (~hegstal@2a02:c7f:7608:d400:8959:ed5e:30f7:362a) |
2021-09-09 10:26:20 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:be0:d306:f2f7:baf5) |
2021-09-09 10:26:51 +0200 | acidjnk_new | (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
2021-09-09 10:30:25 +0200 | econo | (uid147250@user/econo) (Quit: Connection closed for inactivity) |
2021-09-09 10:30:49 +0200 | ubert1 | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) |
2021-09-09 10:31:02 +0200 | acidjnk | (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-09-09 10:31:30 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
2021-09-09 10:32:31 +0200 | mcglk | (~mcglk@131.191.49.120) (Read error: Connection reset by peer) |
2021-09-09 10:34:03 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 10:37:06 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
2021-09-09 10:38:02 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-09-09 10:39:12 +0200 | Vajb | (~Vajb@88.195.168.176) (Read error: Connection reset by peer) |
2021-09-09 10:40:20 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection) |
2021-09-09 10:40:40 +0200 | jonathanx | (~jonathan@dyn-8-sc.cdg.chalmers.se) |
2021-09-09 10:41:03 +0200 | Cajun | (~Cajun@user/cajun) (Quit: Client closed) |
2021-09-09 10:42:09 +0200 | <Gurkenglas> | I don't get PrimGetter/why there's (t->b) in it. What's the theoretical justification? |
2021-09-09 10:42:34 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
2021-09-09 10:42:42 +0200 | <Gurkenglas> | (found on https://oleg.fi/gists/posts/2017-04-18-glassery.html) |
2021-09-09 10:44:40 +0200 | <dminuoso> | Gurkenglas: It's simply the dual of PrimReview |
2021-09-09 10:45:20 +0200 | <dminuoso> | Gurkenglas: And in the glassery there's some details about PrimReview |
2021-09-09 10:45:36 +0200 | <dminuoso> | Note that `type Simple o s a = o s s a a` |
2021-09-09 10:48:02 +0200 | rubin55___ | (sid175221@id-175221.stonehaven.irccloud.com) () |
2021-09-09 10:48:34 +0200 | <Gurkenglas> | dminuoso, is the theoretical justification for each supposed to be that when we apply all the typeclass combinations to p we get all the optic types of which two happen to be PrimReview and PrimGetter, and they are where Review and Getter come from in the first place? |
2021-09-09 10:49:14 +0200 | <dminuoso> | Yes. |
2021-09-09 10:49:14 +0200 | rubin55 | (sid175221@id-175221.stonehaven.irccloud.com) |
2021-09-09 10:50:43 +0200 | <dminuoso> | Both PrimReview and PrimGetter are mostly redundant, they dont appear to model something that is useful in the language of optics |
2021-09-09 10:51:55 +0200 | <Gurkenglas> | Can we rephrase a bunch of the glassery graph by replacing the -> "type Optic c s t a b = forall p. c p => p a b -> p s t" with linearly typed ->s? |
2021-09-09 10:52:02 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 10:53:15 +0200 | <Gurkenglas> | aka a lens is a traversal that uses the (a -> f b) exactly once |
2021-09-09 10:54:31 +0200 | <dminuoso> | I cant even pretend to know anything about that. On some naive level is sounds reasonable, but having absolutely no experience with linearnly typed systems, I cant say at all whether that's encodable like that. |
2021-09-09 10:55:00 +0200 | <dminuoso> | The thing is |
2021-09-09 10:55:06 +0200 | <dminuoso> | With profunctor optics you dont have some `a -> f b` |
2021-09-09 10:55:19 +0200 | <Gurkenglas> | you have some p a b though! |
2021-09-09 10:55:23 +0200 | <dminuoso> | As being a lens is encoded in the `Strong p` constraint on p |
2021-09-09 10:56:07 +0200 | <dminuoso> | Gurkenglas: `forall p. Strong p => Optic p s t a b`, anyway |
2021-09-09 10:56:43 +0200 | <Gurkenglas> | yeah and Optic p s t a b uses a -> in the definition which is my attack vector |
2021-09-09 10:56:52 +0200 | hnOsmium0001 | (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-09 10:56:57 +0200 | <dminuoso> | Mmm? |
2021-09-09 10:57:42 +0200 | <Gurkenglas> | type Traversal s t a b = forall p. Traversing p => p a b -> p s t |
2021-09-09 10:57:57 +0200 | <Gurkenglas> | type Lens s t a b = forall p. Traversing p => p a b %1 -> p s t |
2021-09-09 10:58:24 +0200 | <dminuoso> | Yes, so? |
2021-09-09 10:59:05 +0200 | <Gurkenglas> | It sounds like you are claiming that this won't work, because i have "p a b" instead of "a -> f b" |
2021-09-09 10:59:10 +0200 | <Gurkenglas> | and i dont see why its relevant :D |
2021-09-09 11:00:15 +0200 | <Gurkenglas> | (by the way if we get first class polymorphism while lens switches to %1 and then it turns out we dont have first class %n im gonna be sad) |
2021-09-09 11:02:47 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 265 seconds) |
2021-09-09 11:03:16 +0200 | amahl | (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 265 seconds) |
2021-09-09 11:03:17 +0200 | trcc | (~trcc@users-1190.st.net.au.dk) |
2021-09-09 11:03:35 +0200 | <Gurkenglas> | dminuoso, is your argument just "a -> f b" is understandable enough and it sounds like it would work with that, but "p a b" is mysterious and none of us have any reason to believe whether this would work? :3 |
2021-09-09 11:03:52 +0200 | pretty_dumm_guy | (trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) |
2021-09-09 11:04:16 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) |
2021-09-09 11:04:21 +0200 | <dminuoso> | Gurkenglas: Like I said |
2021-09-09 11:04:31 +0200 | <dminuoso> | I cant even pretend to know anything about whether this is encodable via linear types. |
2021-09-09 11:04:45 +0200 | <dminuoso> | And just that your argument |
2021-09-09 11:04:56 +0200 | <dminuoso> | `aka a lens is a traversal that uses the (a -> f b) exactly once` doesnt apply to optics. can you reformulate |
2021-09-09 11:05:27 +0200 | <Gurkenglas> | aka a lens is a traversal that uses the p a b exactly once |
2021-09-09 11:06:11 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz) |
2021-09-09 11:06:36 +0200 | dextaa0 | (~DV@user/dextaa) |
2021-09-09 11:07:20 +0200 | dextaa | (~DV@user/dextaa) (Read error: Connection reset by peer) |
2021-09-09 11:07:20 +0200 | dextaa0 | dextaa |
2021-09-09 11:08:20 +0200 | <nshepperd2> | a traversal is a lens that uses the (a -> f b) multiple times *and combines the results* |
2021-09-09 11:08:39 +0200 | <Gurkenglas> | yeah im not saying to put traversal it terms of lens, im saying to put lens in terms of traversal |
2021-09-09 11:08:39 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
2021-09-09 11:08:47 +0200 | <dminuoso> | Gurkenglas: Im not convinced that truly holds. |
2021-09-09 11:09:00 +0200 | <nshepperd2> | being linear or not doesn't tell you how to combine things |
2021-09-09 11:09:11 +0200 | <Gurkenglas> | you can't combine things if you only have one of it :3 |
2021-09-09 11:09:17 +0200 | <dminuoso> | Of course you can |
2021-09-09 11:09:22 +0200 | <Gurkenglas> | how? |
2021-09-09 11:09:27 +0200 | <dminuoso> | You can use `p a b` once, duplicate the result and combine them. |
2021-09-09 11:09:38 +0200 | <Gurkenglas> | you can't duplicate the result, thats the point of linear types :23 |
2021-09-09 11:09:42 +0200 | <Gurkenglas> | You cant even throw it away |
2021-09-09 11:09:52 +0200 | <Gurkenglas> | compiler will complain. |
2021-09-09 11:10:26 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 11:10:41 +0200 | <nshepperd2> | being linear on p a b is different from being linear on whatever the 'result' of p a b is |
2021-09-09 11:11:05 +0200 | <dminuoso> | Gurkenglas: no I dont think it holds. |
2021-09-09 11:11:07 +0200 | <dminuoso> | Consider something like |
2021-09-09 11:11:19 +0200 | <dminuoso> | Lens Int () |
2021-09-09 11:11:21 +0200 | <Gurkenglas> | nshepperd2, sure, and i claim specializing traversal to lens needs the "being linear on p a b" one |
2021-09-09 11:11:25 +0200 | trcc | (~trcc@users-1190.st.net.au.dk) () |
2021-09-09 11:11:29 +0200 | <dminuoso> | Err, `Lens' Int ()` |
2021-09-09 11:12:01 +0200 | <dminuoso> | you cant even demand that the input profunctor even be used |
2021-09-09 11:13:24 +0200 | <Gurkenglas> | of course united :: Lens' Int () uses its argument exactly once |
2021-09-09 11:13:33 +0200 | <Gurkenglas> | https://hackage.haskell.org/package/lens-5.0.1/docs/src/Control.Lens.Lens.html#united "united f v = f () <&> \ () -> v" |
2021-09-09 11:14:58 +0200 | <Gurkenglas> | https://hackage.haskell.org/package/profunctor-optics-0.0.2/docs/src/Data.Profunctor.Optic.Lens.ht… too "united = lens (const ()) const" |
2021-09-09 11:15:21 +0200 | <Gurkenglas> | Go ahead, construct a lens that doesnt use its argument. |
2021-09-09 11:17:58 +0200 | <nshepperd2> | a lens works on things that have no way of combining them |
2021-09-09 11:18:11 +0200 | ub | (~Thunderbi@178.165.180.233.wireless.dyn.drei.com) |
2021-09-09 11:18:25 +0200 | <nshepperd2> | a traversal with an arbitrary linearness restriction doesn't |
2021-09-09 11:18:38 +0200 | ubert1 | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 260 seconds) |
2021-09-09 11:20:12 +0200 | ubert | (~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 11:20:12 +0200 | ub | ubert |
2021-09-09 11:20:12 +0200 | oxide | (~lambda@user/oxide) |
2021-09-09 11:22:35 +0200 | paradajz | (~paradajz@2a05:4f46:408:af00:a13:6117:f8f4:effb) |
2021-09-09 11:24:59 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
2021-09-09 11:25:27 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 11:25:37 +0200 | paradajz | (~paradajz@2a05:4f46:408:af00:a13:6117:f8f4:effb) (Client Quit) |
2021-09-09 11:25:41 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 11:29:50 +0200 | <Gurkenglas> | why not? the linearness restriction expresses that we won't need a way of combining them. |
2021-09-09 11:31:13 +0200 | <nshepperd2> | no it doesn't |
2021-09-09 11:31:44 +0200 | <Gurkenglas> | can you give an example? |
2021-09-09 11:31:59 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 252 seconds) |
2021-09-09 11:33:17 +0200 | <nshepperd2> | Applicative f => (a -> f b) ~> (s -> f t) |
2021-09-09 11:34:35 +0200 | <Gurkenglas> | You mean that I can't write "(forall f. Applicative f => (a -> f b) ~> (s -> f t)) -> (forall f. Functor f => (a -> f b) -> (s -> f t))"? |
2021-09-09 11:35:39 +0200 | <nshepperd2> | I mean that if you wanna apply that function, you're gonna have to provide an Applicative instance |
2021-09-09 11:38:23 +0200 | <nshepperd2> | and no, simply inventing one out of `undefined` on the basis that it can't possibly need it is unsound, because as mentioned, > being linear on p a b is different from being linear on whatever the 'result' of p a b is |
2021-09-09 11:39:00 +0200 | mei | (~mei@user/mei) |
2021-09-09 11:39:21 +0200 | <nshepperd2> | and anyway, if you do the right thing and weaken the constraint to Functor f in the first place, then the linear type is redundant |
2021-09-09 11:41:04 +0200 | <gentauro> | so looking at /r/haskell and seeing SPJ "moving along". The question is, is Haskell in good hands going forward? :) |
2021-09-09 11:41:30 +0200 | <merijn> | He's not stopping with Haskell or GHC... |
2021-09-09 11:41:37 +0200 | <merijn> | It literally says right in the post >.> |
2021-09-09 11:41:42 +0200 | <merijn> | He's just leaving MSR |
2021-09-09 11:42:06 +0200 | <Gurkenglas> | nshepperd2, may I have some p where this doesn't work? |
2021-09-09 11:43:38 +0200 | <nshepperd2> | Gurkenglas: literally a -> f b |
2021-09-09 11:43:49 +0200 | <gentauro> | merijn: aha |
2021-09-09 11:43:52 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 265 seconds) |
2021-09-09 11:44:15 +0200 | <gentauro> | I was afraid that he was going to join Oracle and spend time on Java instead :'( |
2021-09-09 11:44:16 +0200 | <Gurkenglas> | :t unsafeSingular -- This does the undefined thing, what does it not work on? |
2021-09-09 11:44:17 +0200 | <lambdabot> | (Conjoined p, Functor f) => Traversing p f s t a b -> Over p f s t a b |
2021-09-09 11:44:28 +0200 | azeem | (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) |
2021-09-09 11:44:39 +0200 | <nshepperd2> | Gurkenglas: that's not the same thing |
2021-09-09 11:44:41 +0200 | <Gurkenglas> | (I admit that properly I should be threading the %1 through the definition to show that the undefined isnt hit) |
2021-09-09 11:45:13 +0200 | <dminuoso> | Gurkenglas: Perhaps the real question is, what are you hoping to obtain? The language of linearity wouldn't allow you to model much else. |
2021-09-09 11:45:23 +0200 | <nshepperd2> | basically, linear type are useless |
2021-09-09 11:45:24 +0200 | <dminuoso> | What is a Prism? What about an AffineFold? |
2021-09-09 11:45:47 +0200 | <nshepperd2> | a function being linear doesn't let the caller do anything new except call it in a context that is itself linear |
2021-09-09 11:46:50 +0200 | <nshepperd2> | this is completely different from parametricity, which actually lets you call functions at different types |
2021-09-09 11:47:58 +0200 | <Gurkenglas> | dminuoso, Lens,Traversal1,AffineTraversal,Traversal become Traversal. Getter,Fold1,AffineFold,Fold become Fold. |
2021-09-09 11:50:41 +0200 | ubert | (~Thunderbi@178.165.180.233.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
2021-09-09 11:53:52 +0200 | luc03 | (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1) |
2021-09-09 11:53:59 +0200 | asthasr | (~asthasr@162.210.28.151) (Quit: asthasr) |
2021-09-09 11:56:12 +0200 | ubert | (~Thunderbi@91.141.39.93.wireless.dyn.drei.com) |
2021-09-09 11:57:40 +0200 | azeem | (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer) |
2021-09-09 11:57:54 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) |
2021-09-09 11:59:41 +0200 | <Gurkenglas> | a lens is to a traversal as a prism is to a... witness that s is isomorphic to "something + (Nat, a)"? my theory predicts that %1 will make it a prism again iff it's the correct definition. |
2021-09-09 12:00:47 +0200 | ubert | (~Thunderbi@91.141.39.93.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 12:00:50 +0200 | ub | (~Thunderbi@91.141.41.188.wireless.dyn.drei.com) |
2021-09-09 12:03:08 +0200 | ub | ubert |
2021-09-09 12:05:56 +0200 | <Gurkenglas> | (that's what i'm hoping to obtain, predictions :)) |
2021-09-09 12:06:46 +0200 | qbt | (~edun@user/edun) (Quit: WeeChat 3.2) |
2021-09-09 12:07:12 +0200 | statusfa1led | statusfailed |
2021-09-09 12:11:57 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-09 12:15:26 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 252 seconds) |
2021-09-09 12:15:47 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 12:16:01 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 12:16:10 +0200 | azeem | (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) |
2021-09-09 12:16:30 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 260 seconds) |
2021-09-09 12:19:38 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-09-09 12:19:41 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 12:20:23 +0200 | azeem | (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer) |
2021-09-09 12:21:04 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 12:21:05 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
2021-09-09 12:21:25 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) |
2021-09-09 12:23:20 +0200 | <Gurkenglas> | Why aren't the lens laws just "view l s ≡ view l s' implies set l b s ≡ set l b s'"? |
2021-09-09 12:26:05 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 260 seconds) |
2021-09-09 12:26:07 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 12:26:20 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 12:26:26 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 12:26:48 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 12:27:05 +0200 | sidbendu | (~sidbendu@188.252.196.5) (Quit: Client closed) |
2021-09-09 12:27:35 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) |
2021-09-09 12:29:34 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 260 seconds) |
2021-09-09 12:30:17 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 12:30:49 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 12:32:49 +0200 | ub | (~Thunderbi@91.141.34.0.wireless.dyn.drei.com) |
2021-09-09 12:33:59 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) |
2021-09-09 12:34:08 +0200 | ubert | (~Thunderbi@91.141.41.188.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 12:34:09 +0200 | ub | ubert |
2021-09-09 12:36:42 +0200 | <nshepperd2> | because that law isn't true? |
2021-09-09 12:37:10 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-09-09 12:37:58 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 12:38:26 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds) |
2021-09-09 12:39:16 +0200 | <[itchyjunk]> | What's a good pace to specfically learn all the A->B->C notations. a :: A->B says a has the type A->B, but i can thinking of a as a function that takes something of type A and returns something of type B right? |
2021-09-09 12:39:56 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 265 seconds) |
2021-09-09 12:40:02 +0200 | <[itchyjunk]> | but when a :: A->B->C->A, is a function that takes two things of type A and B and returns something of type C->A or takes three things of type A,B,C and returns something of type A |
2021-09-09 12:40:03 +0200 | Phantastes | (~Phantaste@c-67-173-229-120.hsd1.co.comcast.net) |
2021-09-09 12:40:04 +0200 | <[itchyjunk]> | type thing |
2021-09-09 12:40:48 +0200 | Phantastes | (~Phantaste@c-67-173-229-120.hsd1.co.comcast.net) (Client Quit) |
2021-09-09 12:43:29 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 12:44:02 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 12:45:48 +0200 | sedeki | (~textual@user/sedeki) |
2021-09-09 12:48:17 +0200 | sedeki | (~textual@user/sedeki) (Client Quit) |
2021-09-09 12:48:23 +0200 | anderson | (~ande@134.209.221.71) (Quit: bye) |
2021-09-09 12:49:32 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 12:49:47 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 12:51:35 +0200 | notzmv | (~zmv@user/notzmv) (Read error: Connection reset by peer) |
2021-09-09 12:52:27 +0200 | anderson | (~ande@134.209.221.71) |
2021-09-09 12:54:55 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 12:55:00 +0200 | notzmv | (~zmv@user/notzmv) |
2021-09-09 12:55:14 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 12:58:18 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 265 seconds) |
2021-09-09 12:59:30 +0200 | azeem | (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) |
2021-09-09 13:00:25 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 13:01:00 +0200 | alx741 | (~alx741@186.178.109.214) |
2021-09-09 13:01:04 +0200 | anderson | (~ande@134.209.221.71) (Changing host) |
2021-09-09 13:01:04 +0200 | anderson | (~ande@user/anderson) |
2021-09-09 13:01:20 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 13:01:58 +0200 | anderson | (~ande@user/anderson) (Quit: bye) |
2021-09-09 13:02:42 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2021-09-09 13:02:44 +0200 | ubert | (~Thunderbi@91.141.34.0.wireless.dyn.drei.com) (Ping timeout: 252 seconds) |
2021-09-09 13:02:50 +0200 | <enikar> | [itchyjunk]: the both are true. Function are currified. When they are partialy applied, they return a new function that takes remaind arguments. |
2021-09-09 13:02:55 +0200 | anderson | (~ande@user/anderson) |
2021-09-09 13:02:55 +0200 | ub | (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) |
2021-09-09 13:02:56 +0200 | azeem | (~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer) |
2021-09-09 13:03:09 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2021-09-09 13:03:11 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) |
2021-09-09 13:05:14 +0200 | ub | ubert |
2021-09-09 13:07:34 +0200 | <[itchyjunk]> | so say f :: A->B->C->D, applying right associativity f :: A->(B->(C->D)). I pass this function only A and the return of this would be a function g :: B->(C->D). If f had A and B, i would have a return of h :: C->D and in case f had A B and C, the return type would be D ? |
2021-09-09 13:08:46 +0200 | vysn | (~vysn@user/vysn) (Quit: WeeChat 3.2) |
2021-09-09 13:09:06 +0200 | <enikar> | [itchyjunk]: exactly. You are right. |
2021-09-09 13:09:45 +0200 | <[itchyjunk]> | this stuff is sloooowly making sense ;_; |
2021-09-09 13:17:25 +0200 | max22- | (~maxime@2a01cb08833598007f934d16e3231d2d.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds) |
2021-09-09 13:19:55 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 13:21:52 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) (Read error: Connection reset by peer) |
2021-09-09 13:22:16 +0200 | <carbolymer> | anyone tried to "register" on haskell.love in the schedule tab? I wanted to build agenda for tomorrow, and it seems not possible |
2021-09-09 13:23:15 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) |
2021-09-09 13:25:55 +0200 | fendor_ | (~fendor@77.119.194.245.wireless.dyn.drei.com) |
2021-09-09 13:26:27 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 13:26:40 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 13:28:45 +0200 | fendor | (~fendor@178.165.191.44.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 13:29:08 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 13:29:18 +0200 | MQ-17J | (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) |
2021-09-09 13:29:44 +0200 | MQ-17J | (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) (Read error: Connection reset by peer) |
2021-09-09 13:29:49 +0200 | fendor_ | fendor |
2021-09-09 13:30:32 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2021-09-09 13:32:22 +0200 | alx741 | (~alx741@186.178.109.214) (Quit: alx741) |
2021-09-09 13:32:53 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 13:34:46 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 13:35:38 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Quit: Client closed) |
2021-09-09 13:36:47 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 13:37:08 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 13:38:15 +0200 | sleblanc | (~sleblanc@user/sleblanc) |
2021-09-09 13:39:34 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Ping timeout: 260 seconds) |
2021-09-09 13:42:42 +0200 | seeg | (~thelounge@static.89.161.217.95.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat) |
2021-09-09 13:43:24 +0200 | seeg | (~thelounge@static.89.161.217.95.clients.your-server.de) |
2021-09-09 13:43:39 +0200 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
2021-09-09 13:47:12 +0200 | bitdex | (~bitdex@gateway/tor-sasl/bitdex) (Quit: = "") |
2021-09-09 13:48:34 +0200 | glguy | (x@libera/staff/glguy) (Read error: Connection reset by peer) |
2021-09-09 13:52:35 +0200 | System123 | (~System123@41.164.183.76) |
2021-09-09 13:54:30 +0200 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds) |
2021-09-09 13:58:42 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 14:03:33 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
2021-09-09 14:05:12 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 14:07:08 +0200 | hololeap | (~hololeap@user/hololeap) |
2021-09-09 14:11:46 +0200 | oxide | (~lambda@user/oxide) (Ping timeout: 260 seconds) |
2021-09-09 14:12:02 +0200 | machinedgod | (~machinedg@135-23-192-217.cpe.pppoe.ca) |
2021-09-09 14:12:56 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-09 14:14:16 +0200 | oxide | (~lambda@user/oxide) |
2021-09-09 14:15:30 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2021-09-09 14:16:56 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-09-09 14:20:47 +0200 | yaroot | (~yaroot@6.3.30.125.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat) |
2021-09-09 14:21:37 +0200 | yaroot | (~yaroot@6.3.30.125.dy.iij4u.or.jp) |
2021-09-09 14:22:18 +0200 | glguy | (x@libera/staff/glguy) |
2021-09-09 14:25:05 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 260 seconds) |
2021-09-09 14:25:18 +0200 | System123 | (~System123@41.164.183.76) (Ping timeout: 260 seconds) |
2021-09-09 14:26:59 +0200 | Akronymus | (~Akronymus@85.118.189.59) |
2021-09-09 14:33:22 +0200 | Lycurgus | (~juan@98.4.112.204) |
2021-09-09 14:37:09 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 14:37:22 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 14:40:06 +0200 | tinhatcat | (~manjaro-g@2620:103:a000:2201:8e4c:af6a:e11c:11a1) (Quit: Leaving) |
2021-09-09 14:43:15 +0200 | <kuribas> | How do you handle versioning of configuration? For example, being able to test a previous version of the app without having to manually edit your configuration files... |
2021-09-09 14:43:37 +0200 | <carbolymer> | in git |
2021-09-09 14:43:59 +0200 | <kuribas> | I don't want to store configuration in git, because it contains passwords etc... |
2021-09-09 14:44:12 +0200 | <carbolymer> | then skip passwords, and store the rest in git |
2021-09-09 14:44:16 +0200 | <carbolymer> | encrypt passwords |
2021-09-09 14:44:25 +0200 | <carbolymer> | or store them in shit like hashicorp vault |
2021-09-09 14:44:26 +0200 | sleblanc | (~sleblanc@user/sleblanc) (Ping timeout: 260 seconds) |
2021-09-09 14:45:00 +0200 | <kuribas> | hmm |
2021-09-09 14:45:21 +0200 | <kuribas> | Also, my own configuration file may look different from the other developers. |
2021-09-09 14:45:30 +0200 | <kuribas> | Different database ports... |
2021-09-09 14:46:01 +0200 | max22- | (~maxime@2a01cb08833598009553b59d4752b14e.ipv6.abo.wanadoo.fr) |
2021-09-09 14:46:20 +0200 | <merijn> | kuribas: Support old formats indefinitely |
2021-09-09 14:46:22 +0200 | <carbolymer> | uhm, you can store your diff on a separate branch or git stash, and rebase it every time |
2021-09-09 14:46:41 +0200 | <merijn> | kuribas: If you change the format, make a migration codepath to "upgrade" old config files to the new code support |
2021-09-09 14:47:08 +0200 | <kuribas> | merijn: well, it's not upgrading which is problematic, but downgrading, for example if production has a different config file then testing. |
2021-09-09 14:48:06 +0200 | <kuribas> | merijn: ideally they would be backwards compatible. |
2021-09-09 14:48:11 +0200 | <kuribas> | I wonder if that can be done with dhall... |
2021-09-09 14:48:29 +0200 | <kuribas> | if dhall will skip fields it doesn't recognise |
2021-09-09 14:49:19 +0200 | <merijn> | kuribas: Presumably the production config is older then testing, so upgrading old configs to new is sufficient, no? |
2021-09-09 14:50:00 +0200 | <kuribas> | merijn: not if I am first testing, then need to hotfix a bug in production. |
2021-09-09 14:51:49 +0200 | slowButPresent | (~slowButPr@user/slowbutpresent) |
2021-09-09 14:51:57 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 14:52:08 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 14:54:58 +0200 | pbrisbin | (~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) |
2021-09-09 14:57:17 +0200 | sedeki | (~textual@user/sedeki) |
2021-09-09 14:57:18 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 14:57:46 +0200 | sedeki | (~textual@user/sedeki) (Client Quit) |
2021-09-09 14:58:24 +0200 | lortabac | (~lortabac@2a01:e0a:541:b8f0:5bfd:35e:da52:7e46) (Quit: WeeChat 2.8) |
2021-09-09 14:59:04 +0200 | max22- | (~maxime@2a01cb08833598009553b59d4752b14e.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2021-09-09 15:00:42 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-09-09 15:03:38 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 15:04:17 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 15:04:43 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 15:09:03 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 15:09:05 +0200 | orcus- | (~orcus@user/brprice) (Quit: ZNC 1.8.1 - https://znc.in) |
2021-09-09 15:09:12 +0200 | Franciman | (~Franciman@openglass.it) |
2021-09-09 15:09:24 +0200 | orcus | (~orcus@user/brprice) |
2021-09-09 15:09:45 +0200 | <Franciman> | Hi all, is there a way to tell ghc to delete all compilation byproducts in the directory? |
2021-09-09 15:09:50 +0200 | <Franciman> | i.e. Main.hi Main.o etc |
2021-09-09 15:10:09 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 15:11:20 +0200 | luc03 | (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) |
2021-09-09 15:13:22 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds) |
2021-09-09 15:13:43 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 15:16:34 +0200 | <adamCS> | Franciman: "cabal clean" might? but it also clears out dependencies that come from a git repo or local directory (via cabal.project). |
2021-09-09 15:17:19 +0200 | <adamCS> | (and that might depend a bit on cabal version...) |
2021-09-09 15:17:22 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 252 seconds) |
2021-09-09 15:17:48 +0200 | <Franciman> | adamCS: I am not using cabal |
2021-09-09 15:18:01 +0200 | <Franciman> | I am using ghc directly |
2021-09-09 15:18:02 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds) |
2021-09-09 15:18:02 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds) |
2021-09-09 15:18:06 +0200 | <adamCS> | ah. No idea, then. Sorry! |
2021-09-09 15:18:54 +0200 | <Franciman> | np, thanks anyways |
2021-09-09 15:19:01 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 252 seconds) |
2021-09-09 15:19:10 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-09-09 15:19:22 +0200 | hendursa1 | (~weechat@user/hendursaga) (Quit: hendursa1) |
2021-09-09 15:19:33 +0200 | max22- | (~maxime@2a01cb0883359800c86fdddfb8d9c63e.ipv6.abo.wanadoo.fr) |
2021-09-09 15:20:55 +0200 | hendursaga | (~weechat@user/hendursaga) |
2021-09-09 15:21:32 +0200 | <kuribas> | Is there a portable solution for config file location? |
2021-09-09 15:23:09 +0200 | <carbolymer> | what do you mean? https://wiki.archlinux.org/title/XDG_user_directories ? |
2021-09-09 15:23:36 +0200 | <kuribas> | carbolymer: does xdg work in windows? |
2021-09-09 15:23:52 +0200 | <carbolymer> | I highly doubt that |
2021-09-09 15:23:56 +0200 | <kuribas> | hmm, an environment variable would do ... |
2021-09-09 15:24:50 +0200 | cheater | (~Username@user/cheater) |
2021-09-09 15:25:17 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2021-09-09 15:32:14 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 15:32:34 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 15:32:55 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:be0:d306:f2f7:baf5) (Ping timeout: 252 seconds) |
2021-09-09 15:33:40 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) |
2021-09-09 15:36:17 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 15:37:14 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-09-09 15:37:39 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-09-09 15:39:56 +0200 | MQ-17J | (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) |
2021-09-09 15:39:56 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 15:39:56 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 15:39:56 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 15:40:54 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Ping timeout: 260 seconds) |
2021-09-09 15:41:03 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-09-09 15:41:25 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-09-09 15:42:04 +0200 | sim590 | (~simon@modemcable090.207-203-24.mc.videotron.ca) |
2021-09-09 15:42:37 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 15:42:50 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 15:42:56 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
2021-09-09 15:43:20 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 15:44:28 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-09-09 15:44:55 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection) |
2021-09-09 15:45:27 +0200 | aratamizuki | (~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) |
2021-09-09 15:51:27 +0200 | shriekingnoise | (~shrieking@186.137.144.80) |
2021-09-09 15:52:06 +0200 | MQ-17J | (~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) (Read error: Connection reset by peer) |
2021-09-09 15:52:10 +0200 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) (Quit: What is Hope? That all of your wishes and all of your dreams come true? To turn back time because things were not supposed to happen like that (C) Rau Le Creuset) |
2021-09-09 15:52:23 +0200 | MQ-17J | (~MQ-17J@35.50.7.10) |
2021-09-09 15:52:44 +0200 | troydm | (~troydm@host-176-37-124-197.b025.la.net.ua) |
2021-09-09 15:55:13 +0200 | Sgeo | (~Sgeo@user/sgeo) |
2021-09-09 15:59:52 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) (Ping timeout: 252 seconds) |
2021-09-09 16:01:38 +0200 | peterhil | (~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) |
2021-09-09 16:02:47 +0200 | Pickchea | (~private@user/pickchea) (Quit: Leaving) |
2021-09-09 16:03:20 +0200 | spruit11 | (~quassel@2a02:a467:ccd6:1:e578:65a3:833a:6855) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.) |
2021-09-09 16:05:10 +0200 | acidjnk_new | (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds) |
2021-09-09 16:05:26 +0200 | jippiedoe | (~david@2a02-a44c-e14e-1-a863-7c6f-a6d9-ecf2.fixed6.kpn.net) |
2021-09-09 16:09:31 +0200 | hnOsmium0001 | (uid453710@id-453710.stonehaven.irccloud.com) |
2021-09-09 16:09:42 +0200 | mcglk | (~mcglk@131.191.49.120) |
2021-09-09 16:10:37 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) |
2021-09-09 16:12:03 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:12:49 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 16:16:20 +0200 | slack1256 | (~slack1256@2607:fb90:25d6:6d7f:a90a:2601:f9dc:3930) |
2021-09-09 16:16:21 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 16:16:29 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:16:47 +0200 | <slack1256> | Is it possible to specify a type family arity from the signature given by StandaloneKindSignatures ? |
2021-09-09 16:17:12 +0200 | <dminuoso> | Sure |
2021-09-09 16:17:17 +0200 | <dminuoso> | % :set -XStandaloneKindSignatures |
2021-09-09 16:17:17 +0200 | <yahb> | dminuoso: |
2021-09-09 16:17:44 +0200 | <dminuoso> | % :set -XDataKinds |
2021-09-09 16:17:44 +0200 | <yahb> | dminuoso: |
2021-09-09 16:18:18 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 16:18:26 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:19:05 +0200 | <dminuoso> | % type F :: Bool -> Type; type family F x where F 'True = Int; F 'False = Char -- slack1256 |
2021-09-09 16:19:05 +0200 | <yahb> | dminuoso: |
2021-09-09 16:19:37 +0200 | <dminuoso> | Is this what you meant? |
2021-09-09 16:19:49 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 16:19:51 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 16:20:30 +0200 | <slack1256> | Mmmm let me think if this is what I actually wanted. |
2021-09-09 16:20:40 +0200 | arahael | (~arahael@203.221.97.63) (Ping timeout: 252 seconds) |
2021-09-09 16:24:42 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 16:24:47 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 16:25:04 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:25:36 +0200 | <luc03> | dminuoso: Do you use % to indicate a ghci prompt? |
2021-09-09 16:27:01 +0200 | <dminuoso> | luc03: It's the trigger command for yahb |
2021-09-09 16:27:01 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
2021-09-09 16:27:06 +0200 | burnside_ | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 16:27:32 +0200 | myShoggoth | (~myShoggot@97-120-70-214.ptld.qwest.net) |
2021-09-09 16:28:04 +0200 | Akronymus | (~Akronymus@85.118.189.59) (Quit: Client closed) |
2021-09-09 16:28:15 +0200 | Akronymus | (~Akronymus@85.118.189.59) |
2021-09-09 16:30:51 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 16:31:00 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:31:29 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 16:31:37 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:32:12 +0200 | waleee | (~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) |
2021-09-09 16:32:35 +0200 | spruit11 | (~quassel@2a02:a467:ccd6:1:6cc9:33fd:d92c:45c) |
2021-09-09 16:36:24 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 16:39:58 +0200 | tlaxkit | (~hexchat@170.253.47.137) |
2021-09-09 16:45:02 +0200 | phma | (~phma@host-67-44-208-177.hnremote.net) (Read error: Connection reset by peer) |
2021-09-09 16:45:04 +0200 | burnside_ | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-09-09 16:45:29 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 252 seconds) |
2021-09-09 16:45:51 +0200 | phma | (~phma@host-67-44-209-67.hnremote.net) |
2021-09-09 16:46:58 +0200 | <dminuoso> | Oh I can see how that might not have been obvious. |
2021-09-09 16:47:07 +0200 | <dminuoso> | % foldr (+) 0 [1,2,3,4,5] -- luc03 |
2021-09-09 16:47:07 +0200 | <yahb> | dminuoso: 15 |
2021-09-09 16:47:44 +0200 | <dminuoso> | yahb is just a GHCi bot, if you write a message starting with % yahb will run everything that follows in a GHCi session |
2021-09-09 16:47:51 +0200 | <dminuoso> | And return the output |
2021-09-09 16:50:24 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 16:51:28 +0200 | pavonia | (~user@user/siracusa) |
2021-09-09 16:54:19 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 252 seconds) |
2021-09-09 16:55:34 +0200 | xff0x | (~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) (Ping timeout: 260 seconds) |
2021-09-09 16:55:42 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 16:55:50 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:56:29 +0200 | xff0x | (~xff0x@port-92-193-229-234.dynamic.as20676.net) |
2021-09-09 16:56:56 +0200 | <slack1256> | dminuoso: https://gist.github.com/RubenAstudillo/6fb47a6dfe9238987c292c1894e2bfbe |
2021-09-09 16:57:16 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 16:57:38 +0200 | <slack1256> | I think my problem is with using partially applied type families. If you have time, can you read that gist? |
2021-09-09 16:57:42 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:58:15 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 16:59:13 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 16:59:43 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
2021-09-09 17:00:14 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 260 seconds) |
2021-09-09 17:00:46 +0200 | aman | (~aman@user/aman) |
2021-09-09 17:09:35 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 17:09:49 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 17:09:51 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 17:10:12 +0200 | vysn | (~vysn@user/vysn) |
2021-09-09 17:10:30 +0200 | kstuart | (~kstuart@85.203.34.2) |
2021-09-09 17:11:23 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 17:11:26 +0200 | <merijn> | slack1256: wait |
2021-09-09 17:11:38 +0200 | <merijn> | slack1256: Why are you defining a type synonym *and* type with the same name? |
2021-09-09 17:11:52 +0200 | <merijn> | You're defining Sigma twice |
2021-09-09 17:12:09 +0200 | <slack1256> | StandaloneKindSignatures :-) |
2021-09-09 17:12:13 +0200 | <merijn> | Or is this fancy new typefamilies syntax they changed when I wasn't looking? |
2021-09-09 17:12:23 +0200 | <slack1256> | merijn: The future is now! |
2021-09-09 17:12:40 +0200 | <merijn> | Why not just define them in place? >.> |
2021-09-09 17:13:22 +0200 | <slack1256> | It is an example, I wanted to try my hand at SAKS. Also, to see if they worked with type families. |
2021-09-09 17:13:42 +0200 | Andrew | (~andrew@user/andrewyu) (Ping timeout: 250 seconds) |
2021-09-09 17:13:43 +0200 | <slack1256> | But sure, on a real closed type families, there is no much sense to use SAKS. |
2021-09-09 17:14:25 +0200 | AndrewYu | (~andrew@user/andrewyu) |
2021-09-09 17:16:08 +0200 | Akronymus | (~Akronymus@85.118.189.59) (Quit: Client closed) |
2021-09-09 17:17:15 +0200 | Akronymus | (~Akronymus@85.118.189.59) |
2021-09-09 17:18:00 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 17:18:14 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 17:18:38 +0200 | zmt00 | (~zmt00@user/zmt00) |
2021-09-09 17:19:30 +0200 | burnside_ | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 17:19:30 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Read error: Connection reset by peer) |
2021-09-09 17:20:28 +0200 | Akronymus | (~Akronymus@85.118.189.59) (Client Quit) |
2021-09-09 17:22:33 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 17:23:26 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 17:23:46 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 17:24:43 +0200 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) |
2021-09-09 17:24:47 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 17:26:27 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) (Remote host closed the connection) |
2021-09-09 17:26:52 +0200 | ChaiTRex | (~ChaiTRex@user/chaitrex) |
2021-09-09 17:30:38 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 17:30:47 +0200 | mc47 | (~mc47@xmonad/TheMC47) (Remote host closed the connection) |
2021-09-09 17:30:54 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 17:31:52 +0200 | jippiedoe | (~david@2a02-a44c-e14e-1-a863-7c6f-a6d9-ecf2.fixed6.kpn.net) (Quit: Leaving) |
2021-09-09 17:33:51 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) |
2021-09-09 17:37:18 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 17:39:36 +0200 | favonia | (~favonia@user/favonia) (Ping timeout: 265 seconds) |
2021-09-09 17:40:44 +0200 | chele | (~chele@user/chele) (Remote host closed the connection) |
2021-09-09 17:40:52 +0200 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) |
2021-09-09 17:41:32 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 265 seconds) |
2021-09-09 17:42:48 +0200 | System123 | (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) |
2021-09-09 17:43:00 +0200 | System123 | (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Quit: Leaving...) |
2021-09-09 17:44:53 +0200 | <monochrom> | https://discourse.haskell.org/t/new-horizons-for-spj/3099?u=taylorfausak |
2021-09-09 17:45:32 +0200 | <monochrom> | This just before the Haskell Love conference. Tomorrow everyone will be overwhelming him during his keynote speech! |
2021-09-09 17:45:38 +0200 | System123 | (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) |
2021-09-09 17:46:12 +0200 | vysn | (~vysn@user/vysn) (Quit: WeeChat 3.2) |
2021-09-09 17:47:52 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
2021-09-09 17:49:53 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
2021-09-09 17:50:31 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 17:52:13 +0200 | <pavonia> | Is this a fancy mailing list archive or a separate board? |
2021-09-09 17:52:26 +0200 | <monochrom> | separate board |
2021-09-09 17:52:49 +0200 | <pavonia> | Interesting, never heard of it |
2021-09-09 17:53:26 +0200 | MQ-17J | (~MQ-17J@35.50.7.10) (Ping timeout: 260 seconds) |
2021-09-09 17:53:53 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) |
2021-09-09 17:54:27 +0200 | [itchyjunk] | (~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer) |
2021-09-09 17:54:36 +0200 | <geekosaur> | it's fairly recent, part of the new Haskell Foundation stuff |
2021-09-09 17:57:13 +0200 | amahl | (~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) |
2021-09-09 17:58:04 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
2021-09-09 18:01:11 +0200 | burnside_ | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection) |
2021-09-09 18:01:28 +0200 | MQ-17J | (~MQ-17J@2607:fb90:1d3a:e28c:515f:1bae:68b2:8409) |
2021-09-09 18:01:50 +0200 | Lycurgus | (~juan@98.4.112.204) (Ping timeout: 260 seconds) |
2021-09-09 18:01:53 +0200 | cfricke | (~cfricke@user/cfricke) (Quit: WeeChat 3.2) |
2021-09-09 18:01:58 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 18:02:24 +0200 | shapr | (~user@c-69-138-21-57.hsd1.va.comcast.net) |
2021-09-09 18:02:43 +0200 | <Hecate> | omfg https://github.com/zkat/miette |
2021-09-09 18:02:48 +0200 | hexfive | (~eric@50.35.83.177) |
2021-09-09 18:02:48 +0200 | hexfive | (~eric@50.35.83.177) (Client Quit) |
2021-09-09 18:04:47 +0200 | System123 | (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Remote host closed the connection) |
2021-09-09 18:06:31 +0200 | luc03 | (~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1) |
2021-09-09 18:07:51 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 18:08:08 +0200 | tzh | (~tzh@c-24-21-73-154.hsd1.or.comcast.net) |
2021-09-09 18:08:34 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 18:09:54 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-09-09 18:10:41 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 18:10:44 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-09 18:11:56 +0200 | vysn | (~vysn@user/vysn) |
2021-09-09 18:12:32 +0200 | azeem | (~azeem@emp-182-240.eduroam.uu.se) (Read error: Connection reset by peer) |
2021-09-09 18:13:12 +0200 | azeem | (~azeem@2a00:801:23e:e471:2966:ade4:f65d:e1fd) |
2021-09-09 18:13:49 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 18:14:06 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 18:14:13 +0200 | <gentauro> | monochrom: doesn't SPJ "own" part of FP Complete? Perhaps he will join there? |
2021-09-09 18:14:41 +0200 | gentauro | reference: https://www.fpcomplete.com/blog/2013/01/why-im-investing-in-fp-complete/ |
2021-09-09 18:15:45 +0200 | <gentauro> | perhaps his position will be BDFL of Haskell? |
2021-09-09 18:18:22 +0200 | arahael | (~arahael@203.221.121.242) |
2021-09-09 18:19:07 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 18:19:08 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 18:19:08 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 18:19:42 +0200 | <Hecate> | gentauro: he's already in such a place through the GHC Steering Committee :) |
2021-09-09 18:22:08 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 265 seconds) |
2021-09-09 18:22:13 +0200 | martin02 | (~silas@141.84.69.76) (Ping timeout: 252 seconds) |
2021-09-09 18:23:37 +0200 | martin02 | (~silas@141.84.69.76) |
2021-09-09 18:24:39 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 18:27:59 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
2021-09-09 18:28:10 +0200 | slack1256 | (~slack1256@2607:fb90:25d6:6d7f:a90a:2601:f9dc:3930) (Remote host closed the connection) |
2021-09-09 18:28:15 +0200 | cafkafk | (~cafkafk@user/cafkafk) |
2021-09-09 18:28:46 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 18:29:18 +0200 | favonia | (~favonia@user/favonia) |
2021-09-09 18:29:48 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 18:30:03 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 18:31:29 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 18:31:32 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-09-09 18:31:50 +0200 | shapr | (~user@c-69-138-21-57.hsd1.va.comcast.net) (Ping timeout: 260 seconds) |
2021-09-09 18:32:54 +0200 | glguy_ | (x@libera/staff/glguy) |
2021-09-09 18:34:15 +0200 | glguy | (x@libera/staff/glguy) (Read error: Connection reset by peer) |
2021-09-09 18:34:39 +0200 | proofofkeags | (~proofofke@205.209.28.54) |
2021-09-09 18:34:54 +0200 | shapr | (~user@c-69-138-21-57.hsd1.dc.comcast.net) |
2021-09-09 18:35:00 +0200 | Erutuon | (~Erutuon@user/erutuon) |
2021-09-09 18:36:15 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 18:37:35 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 18:37:39 +0200 | <monochrom> | "imperator" is better. |
2021-09-09 18:38:14 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-09-09 18:39:07 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) |
2021-09-09 18:41:59 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer) |
2021-09-09 18:42:38 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) |
2021-09-09 18:43:53 +0200 | burnsidesLlama | (~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 265 seconds) |
2021-09-09 18:44:42 +0200 | MQ-17J | (~MQ-17J@2607:fb90:1d3a:e28c:515f:1bae:68b2:8409) (Read error: Connection reset by peer) |
2021-09-09 18:44:59 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 18:48:29 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2021-09-09 18:49:12 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 18:49:25 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 18:51:41 +0200 | hegstal | (~hegstal@2a02:c7f:7608:d400:8959:ed5e:30f7:362a) (Remote host closed the connection) |
2021-09-09 18:52:06 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
2021-09-09 18:53:04 +0200 | glguy_ | glguy |
2021-09-09 18:54:50 +0200 | aman | (~aman@user/aman) |
2021-09-09 18:56:30 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 18:56:35 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 18:57:11 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds) |
2021-09-09 18:59:53 +0200 | hrnz | (~ulli@vegan.im.it) (Quit: das ist mir zu bld hier; bb) |
2021-09-09 19:00:37 +0200 | hrnz | (~ulli@vegan.im.it) |
2021-09-09 19:01:19 +0200 | hrnz | (~ulli@vegan.im.it) (Client Quit) |
2021-09-09 19:01:47 +0200 | hrnz | (~ulli@vegan.im.it) |
2021-09-09 19:03:28 +0200 | <maerwald> | SPJ working on stack? |
2021-09-09 19:03:32 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 19:04:03 +0200 | zebrag | (~chris@user/zebrag) |
2021-09-09 19:08:07 +0200 | Vajb | (~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer) |
2021-09-09 19:08:48 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 19:08:53 +0200 | <Hecate> | maerwald: uh? |
2021-09-09 19:09:02 +0200 | <Hecate> | why are you giving me heart attacks like that |
2021-09-09 19:09:11 +0200 | hnOsmium0001 | (uid453710@id-453710.stonehaven.irccloud.com) (Quit: Connection closed for inactivity) |
2021-09-09 19:09:41 +0200 | <monochrom> | I thought gentauro said it first. |
2021-09-09 19:10:00 +0200 | <monochrom> | You didn't have a heart attack back then. Why now? |
2021-09-09 19:10:00 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 19:10:15 +0200 | <geekosaur> | I thought FPC had moved stack to community support more or less anyway |
2021-09-09 19:11:58 +0200 | <maerwald> | geekosaur: you mean the issue tracker is dead? yeah |
2021-09-09 19:14:47 +0200 | <maerwald> | I've been commenting on it for the past 2 weeks and fixed several bugs. Generally, there's not response to both issues and PRs, unless e.g. the metadata is broken. |
2021-09-09 19:16:38 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-09 19:16:54 +0200 | econo | (uid147250@user/econo) |
2021-09-09 19:17:50 +0200 | tureba | (~tureba@tureba.org) (Ping timeout: 252 seconds) |
2021-09-09 19:18:17 +0200 | nshepperd2 | (~nshepperd@li364-218.members.linode.com) (Quit: Ping timeout (120 seconds)) |
2021-09-09 19:18:27 +0200 | nshepperd2 | (~nshepperd@li364-218.members.linode.com) |
2021-09-09 19:18:28 +0200 | abraham | (~abraham@191.96.120.55) |
2021-09-09 19:20:17 +0200 | <maerwald> | you may ask why... well, because I'm getting stack bug reports now. |
2021-09-09 19:21:06 +0200 | lavaman | (~lavaman@98.38.249.169) (Ping timeout: 265 seconds) |
2021-09-09 19:21:40 +0200 | shapr | (~user@c-69-138-21-57.hsd1.dc.comcast.net) (Remote host closed the connection) |
2021-09-09 19:21:53 +0200 | <geekosaur> | you can unsubscribe |
2021-09-09 19:22:26 +0200 | <monochrom> | Or we can name you Imperator of Stack so you can act on the bug reports. >:) |
2021-09-09 19:22:31 +0200 | <geekosaur> | auto-subscribing people to new issues is imo one of the weirder github-ism |
2021-09-09 19:23:10 +0200 | <geekosaur> | *s |
2021-09-09 19:23:19 +0200 | <monochrom> | Interesting. But I would think github learned it from Amazon. |
2021-09-09 19:24:47 +0200 | <monochrom> | "You looked at a Logitech keyboard. We think you will be interested in all kinds of RGB gaming peripherals." |
2021-09-09 19:25:20 +0200 | <monochrom> | "You submitted a bug report. We think you will be interested in all kinds of bug reports." |
2021-09-09 19:25:50 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 260 seconds) |
2021-09-09 19:25:56 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 265 seconds) |
2021-09-09 19:28:26 +0200 | jangid | (~user@2405:201:5c06:70a7:747e:edf:1970:bbdb) |
2021-09-09 19:28:31 +0200 | <maerwald> | eh, worst thing is if you work on github hosted projects and can't distinguish the 200+ notifications from useful bug reports on your open source libs anymore |
2021-09-09 19:32:13 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 265 seconds) |
2021-09-09 19:35:17 +0200 | <maerwald> | here... ppl complaining about emails and mailing lists |
2021-09-09 19:35:26 +0200 | <maerwald> | at least there I can have a proper filter |
2021-09-09 19:35:38 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
2021-09-09 19:35:48 +0200 | <jangid> | The type of '(<)' is a function and type of 'compare' is a function. Then why compare works with backticks in infix format but this doesn't work: 4 `(<)` 5 |
2021-09-09 19:36:17 +0200 | <jangid> | what is the rule for backtics? |
2021-09-09 19:36:53 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-09-09 19:37:44 +0200 | <dsal> | Functions made up of symbols are infix by default and functions made up of letters are prefix by default. |
2021-09-09 19:37:52 +0200 | <dsal> | > (<) 4 5 |
2021-09-09 19:37:54 +0200 | <lambdabot> | True |
2021-09-09 19:37:58 +0200 | <dsal> | > 4 `compare` 5 |
2021-09-09 19:38:00 +0200 | <lambdabot> | LT |
2021-09-09 19:38:41 +0200 | <dsal> | Backticks allow you to use a prefix function infix and parens let you use an infix function prefix. |
2021-09-09 19:38:57 +0200 | <dsal> | (hand wavy wording) |
2021-09-09 19:39:23 +0200 | <mangoiv> | I think his question is specifically about why `(<)` doesn't work (as the brackets make "<" a prefix function) |
2021-09-09 19:39:25 +0200 | <mangoiv> | m |
2021-09-09 19:39:40 +0200 | <mangoiv> | *their |
2021-09-09 19:40:53 +0200 | <dolio> | Because backticks are for making alphabetical names infix. |
2021-09-09 19:41:03 +0200 | <awpr> | there are backquotes there, but some IRC clients are interpreting them as formatting; I think the question is why backquotes don't undo the effect of parens |
2021-09-09 19:41:38 +0200 | <awpr> | and I think the answer is just that the syntax is defined so that backquotes around alphanumeric-style identifiers create an infix operator |
2021-09-09 19:41:59 +0200 | <awpr> | as opposed to backquotes around "anything that would be a prefix function" |
2021-09-09 19:42:29 +0200 | <awpr> | i.e., that's just how it is |
2021-09-09 19:42:39 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 19:44:15 +0200 | Vajb | (~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) |
2021-09-09 19:49:05 +0200 | dhouthoo | (~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2) |
2021-09-09 19:49:37 +0200 | favonia | (~favonia@user/favonia) (Ping timeout: 252 seconds) |
2021-09-09 19:49:44 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 19:50:03 +0200 | <jangid> | yes, I want to why backticks doesn't under the effect of parens. |
2021-09-09 19:50:21 +0200 | <jangid> | I mean doesn't undo the effect of parens |
2021-09-09 19:50:49 +0200 | <awpr> | that's just how the grammar is defined. (<) is an expression but not an identifier, but backquotes turn identifiers into infix operators |
2021-09-09 19:51:41 +0200 | <jangid> | but calling :t with (<) shows it as a function |
2021-09-09 19:51:53 +0200 | <awpr> | it sure is. but it's not an identifier |
2021-09-09 19:51:59 +0200 | <mangoiv> | well, it is a function in any case. |
2021-09-09 19:52:04 +0200 | <awpr> | this is about the Haskell syntax, not the type system |
2021-09-09 19:52:31 +0200 | <jangid> | hmm, I think I am beginning to understand. |
2021-09-09 19:53:50 +0200 | <jangid> | everything is function if we check types :t 5 reports 5 :: Num p => p |
2021-09-09 19:54:40 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 19:54:46 +0200 | <dminuoso> | It's not a function. |
2021-09-09 19:54:58 +0200 | <iqubic> | No actually, that's just a single value. |
2021-09-09 19:55:14 +0200 | <awpr> | it's got nothing to do with whether it's a function, you could just as well do "let x = True in 2 `x` 2". it'd be a type error, but still parsed as an infix operator |
2021-09-09 19:55:23 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 19:55:32 +0200 | <awpr> | https://gitlab.haskell.org/ghc/ghc/-/blob/master/compiler/GHC/Parser.y#L3656 is where the grammar describes the backquote syntax; it specifically wants a "varid" inside the backquotes, not an expression |
2021-09-09 19:55:35 +0200 | <dminuoso> | While, in the implementation, that might be compiled into being parametrized over a dictionary, that's an implementation detail and might not even happen. |
2021-09-09 19:56:03 +0200 | <iqubic> | But actually, the way that number literals work is that haskell turns your 5 into "fromIntergral 5" |
2021-09-09 19:56:29 +0200 | <awpr> | a "varid" is the alphanumeric-style identifier I was talking about earlier, basically a name made of text rather than symbols |
2021-09-09 19:57:13 +0200 | <dolio> | Just like you're not allowed to write: (`isInfixOf`) |
2021-09-09 19:57:25 +0200 | kuribas | (~user@ptr-25vy0i7s9yl7nzqhecr.18120a2.ip6.access.telenet.be) (Remote host closed the connection) |
2021-09-09 19:58:05 +0200 | <jangid> | dolio: exactly. that's how the grammar is. |
2021-09-09 19:58:06 +0200 | kayprish | (~kayprish@cable-188-2-153-140.dynamic.sbb.rs) |
2021-09-09 19:58:18 +0200 | <jangid> | thnks for help, friends |
2021-09-09 19:58:48 +0200 | <awpr> | I guess to get a bit more into "why", if you wanted backquotes to work on parenthesized operator names, you might define them as containing an expression rather than a varid. but then you'd have a problem: backquotes aren't matched pairs, so there's an ambiguity where the ending backquote could get parsed as another nested backquote operator. incoming GHC proposal: add guillemets as an operator delimiter that contains expressions |
2021-09-09 19:58:48 +0200 | <awpr> | :) |
2021-09-09 19:58:49 +0200 | <mangoiv> | iqubic: really? That's interesting, why does it parse it as an int in the first place? It could just parse it as "some number" as that's what it's kept as anyways? |
2021-09-09 19:59:29 +0200 | <awpr> | iqubic: unless you're using https://hackage.haskell.org/package/dependent-literals-plugin :P |
2021-09-09 19:59:29 +0200 | <iqubic> | :t fromIntegral |
2021-09-09 19:59:30 +0200 | <lambdabot> | (Integral a, Num b) => a -> b |
2021-09-09 19:59:49 +0200 | chisui | (~chisui@200116b868aa4700d8770583f0c423d2.dip.versatel-1u1.de) |
2021-09-09 20:00:22 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) (Ping timeout: 260 seconds) |
2021-09-09 20:01:06 +0200 | <iqubic> | It's not actually parsing it as an Int. |
2021-09-09 20:02:29 +0200 | <mangoiv> | Can you elaborate? Cause I think I didn't understand yet. If it isn't parsed to an Int, why does it have to use fromIntegral then? |
2021-09-09 20:04:32 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 20:04:45 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 20:05:00 +0200 | <iqubic> | I'm both surprised and pleased that DataKinds and NumericUnderscores work well together, letting me use "2_147_483_647" as a thing of kind Nat. |
2021-09-09 20:05:09 +0200 | beka | (~beka@104.193.170.240) |
2021-09-09 20:05:32 +0200 | abraham | (~abraham@191.96.120.55) (Quit: Textual IRC Client: www.textualapp.com) |
2021-09-09 20:05:36 +0200 | System123 | (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) |
2021-09-09 20:06:18 +0200 | <justsomeguy> | I have a linux filepath, and want to find out the UID or user name of the account that owns it. What module has functions for stuff like that? |
2021-09-09 20:07:43 +0200 | <koala_man> | unix presumably. System.Posix.Files |
2021-09-09 20:07:43 +0200 | <justsomeguy> | (I tried searching for getUser, getOwner, and a few different type signature on Hoogle but didn't come up with anything useful.) |
2021-09-09 20:08:02 +0200 | enoq | (~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7) (Quit: enoq) |
2021-09-09 20:08:02 +0200 | <koala_man> | fileOwner :: FileStatus -> UserID |
2021-09-09 20:08:14 +0200 | <awpr> | mangoiv: from GHC's perspective the literal value is an Integer, and the interpretation of that Integer as whatever particular numeric type is up to Haskell library code; that way libraries can define custom numeric types that work with integral literals by adding their own Num instance, without needing to modify the compiler to know about it. `fromInteger` is the hook that GHC uses to talk to the library side, so it turns |
2021-09-09 20:08:14 +0200 | <awpr> | source-level literals `42` into `fromInteger 42`, which ends up calling whichever implementation is appropriate, including custom numeric types |
2021-09-09 20:08:28 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 20:08:45 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 20:08:54 +0200 | favonia | (~favonia@user/favonia) |
2021-09-09 20:09:15 +0200 | <awpr> | most of the time that gets optimized into something like `I# 42#` by inlining and simplifying and such, so it's almost like the compiler has built-in knowledge of every custom numeric type that will ever exist |
2021-09-09 20:09:25 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds) |
2021-09-09 20:10:10 +0200 | System123 | (~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Ping timeout: 260 seconds) |
2021-09-09 20:10:20 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Client Quit) |
2021-09-09 20:10:32 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 20:11:55 +0200 | <justsomeguy> | This seems to work in ghci ... s <- getFileStatus "testdir"; print $ fileOwner s |
2021-09-09 20:12:25 +0200 | <justsomeguy> | Thanks for pointing me in the right direction, koala_man |
2021-09-09 20:13:33 +0200 | <justsomeguy> | I should probably just do a search for likely module names from packages included with ghc and base next time. |
2021-09-09 20:13:57 +0200 | <jangid> | (Integral a, Num b) => a -> b i.e. fromIntegral parses a as integer and converts it into more generic number so that it is easy to put it in expressions with Floating. |
2021-09-09 20:14:59 +0200 | <awpr> | careful not to mix up fromIntegral and fromInteger -- `fromIntegral = fromInteger . toInteger` |
2021-09-09 20:15:16 +0200 | <awpr> | :t (fromInteger, toInteger, fromIntegral) |
2021-09-09 20:15:17 +0200 | <lambdabot> | (Integral a1, Integral a2, Num a3, Num b) => (Integer -> a3, a1 -> Integer, a2 -> b) |
2021-09-09 20:15:36 +0200 | <awpr> | oof, that formatting is less useful than I had hoped |
2021-09-09 20:16:51 +0200 | <awpr> | anyway fromInteger is the one GHC uses internally for integral literals, and fromIntegral is the one you'd usually use as a Haskell user for converting "whatever inty type" to "whatever numeric type" |
2021-09-09 20:17:07 +0200 | <monochrom> | I# 42# means that the compiler knows it's Int. |
2021-09-09 20:17:42 +0200 | <awpr> | yep, I'd contend that most of the time you use a literal it's for a statically known type |
2021-09-09 20:19:29 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) |
2021-09-09 20:21:00 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 20:24:13 +0200 | <mangoiv> | Thanks awpr for the for the extensive answer! |
2021-09-09 20:24:38 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds) |
2021-09-09 20:26:19 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 20:26:19 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 20:26:19 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 20:27:50 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 20:28:17 +0200 | <_bin> | What's the best way to retry a GET with wreq until it succeeds if I hit a 5xx error or similar? |
2021-09-09 20:28:19 +0200 | lavaman | (~lavaman@98.38.249.169) |
2021-09-09 20:29:46 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds) |
2021-09-09 20:30:23 +0200 | <iqubic> | How does fromInteger work for Word16? Does it just take the 16 lowest bits of the given Integer? |
2021-09-09 20:30:53 +0200 | hnOsmium0001 | (uid453710@id-453710.stonehaven.irccloud.com) |
2021-09-09 20:31:16 +0200 | asivitz | (uid178348@id-178348.tinside.irccloud.com) |
2021-09-09 20:31:27 +0200 | <awpr> | generally fromInteger overflows, or sometimes throws. I don't know of any that saturate |
2021-09-09 20:31:38 +0200 | <awpr> | > fromInteger 65537 :: Word16 |
2021-09-09 20:31:40 +0200 | <lambdabot> | 1 |
2021-09-09 20:32:06 +0200 | <awpr> | but GHC has warnings for out-of-range literals for a few types it has actual built-in knowledge of |
2021-09-09 20:32:19 +0200 | <awpr> | > 65537 :: Word16 |
2021-09-09 20:32:20 +0200 | <lambdabot> | 1 |
2021-09-09 20:32:43 +0200 | <awpr> | hmm, lambdabot doesn't show them, but it's `-Woverflowed-literals` |
2021-09-09 20:33:05 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) |
2021-09-09 20:33:09 +0200 | <iqubic> | What I want is a way to convert an Integer to a Word16 by just taking the lowest 16 bits. How can I do that? |
2021-09-09 20:33:36 +0200 | <awpr> | that should have the same effect as overflowing, i.e. fromInteger does that |
2021-09-09 20:34:00 +0200 | <iqubic> | Cool! |
2021-09-09 20:34:46 +0200 | ezzieyguywuf | (~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds) |
2021-09-09 20:35:59 +0200 | jangid | (~user@2405:201:5c06:70a7:747e:edf:1970:bbdb) (Quit: day over) |
2021-09-09 20:37:53 +0200 | roboguy_ | (~roboguy_@cpe-98-156-4-161.kc.res.rr.com) |
2021-09-09 20:38:01 +0200 | vicfred | (~vicfred@user/vicfred) |
2021-09-09 20:39:25 +0200 | dyeplexer | (~dyeplexer@user/dyeplexer) (Remote host closed the connection) |
2021-09-09 20:41:20 +0200 | wroathe | (~wroathe@user/wroathe) (Ping timeout: 260 seconds) |
2021-09-09 20:41:25 +0200 | ephemient | (uid407513@id-407513.lymington.irccloud.com) |
2021-09-09 20:42:20 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
2021-09-09 20:44:58 +0200 | lavaman | (~lavaman@98.38.249.169) (Remote host closed the connection) |
2021-09-09 20:47:06 +0200 | kstuart | (~kstuart@85.203.34.2) (Remote host closed the connection) |
2021-09-09 20:47:29 +0200 | alx741 | (~alx741@186.178.109.214) |
2021-09-09 20:49:22 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) |
2021-09-09 20:49:24 +0200 | mmohammadi9812 | (~Mohammad@ip232.ip-51-222-214.net) |
2021-09-09 20:56:22 +0200 | abraham | (~abraham@143.244.185.86) |
2021-09-09 20:57:11 +0200 | max22- | (~maxime@2a01cb0883359800c86fdddfb8d9c63e.ipv6.abo.wanadoo.fr) (Quit: Leaving) |
2021-09-09 20:59:24 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) (Remote host closed the connection) |
2021-09-09 21:00:02 +0200 | thyriaen | (~thyriaen@x4db77b69.dyn.telefonica.de) |
2021-09-09 21:01:14 +0200 | alx741 | (~alx741@186.178.109.214) (Quit: alx741) |
2021-09-09 21:01:40 +0200 | geekosaur | (~geekosaur@xmonad/geekosaur) |
2021-09-09 21:03:56 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 21:05:45 +0200 | aman | (~aman@user/aman) (Quit: aman) |
2021-09-09 21:07:09 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 21:08:53 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds) |
2021-09-09 21:11:26 +0200 | mmohammadi9812 | (~Mohammad@ip232.ip-51-222-214.net) (Killed (NickServ (GHOST command used by mohammadi9812m!~Mohammad@2.178.201.78))) |
2021-09-09 21:11:39 +0200 | <_bin> | To clarify the above, I am attempting to make a number of requests and sometimes receive errors (timeouts, 5xx, etc.) I'd like to simply repeat the request indefinitely until I get a successful response; how should I go about doing this? |
2021-09-09 21:11:46 +0200 | mmohammadi9812 | (~Mohammad@2.178.201.78) |
2021-09-09 21:12:16 +0200 | <maerwald> | _bin: there's a retry strategies thing |
2021-09-09 21:12:18 +0200 | <maerwald> | sec |
2021-09-09 21:13:02 +0200 | <maerwald> | _bin: https://hackage.haskell.org/package/retry-0.9.0.0/docs/Control-Retry.html |
2021-09-09 21:13:10 +0200 | _ht | (~quassel@82-169-194-8.biz.kpn.net) |
2021-09-09 21:13:10 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 21:13:11 +0200 | System123 | (~System123@165-73-115-78.ip.afrihost.capetown) |
2021-09-09 21:13:20 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh) |
2021-09-09 21:13:30 +0200 | <maerwald> | I use fullJitterBackoff http://www.awsarchitectureblog.com/2015/03/backoff.html |
2021-09-09 21:14:02 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 21:14:21 +0200 | phma | (~phma@host-67-44-209-67.hnremote.net) (Read error: Connection reset by peer) |
2021-09-09 21:15:12 +0200 | phma | (~phma@host-67-44-208-90.hnremote.net) |
2021-09-09 21:15:25 +0200 | max22- | (~maxime@2a01cb08833598004190beef1e8cf3bf.ipv6.abo.wanadoo.fr) |
2021-09-09 21:19:58 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-09-09 21:20:28 +0200 | <_bin> | maerwald: Thanks, this looks promising. |
2021-09-09 21:24:10 +0200 | <iqubic> | @pl \m -> m `mod` 5 == 0 |
2021-09-09 21:24:10 +0200 | <lambdabot> | (0 ==) . (`mod` 5) |
2021-09-09 21:25:20 +0200 | Guest|41 | (~Guest|41@129.104.98.71) |
2021-09-09 21:26:30 +0200 | Axma21295 | (~Axman6@user/axman6) |
2021-09-09 21:28:07 +0200 | Axman6 | (~Axman6@user/axman6) (Ping timeout: 260 seconds) |
2021-09-09 21:28:19 +0200 | System12_ | (~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) |
2021-09-09 21:30:22 +0200 | <iqubic> | I think I'll just use the former version. |
2021-09-09 21:30:37 +0200 | <teddyc> | lol |
2021-09-09 21:31:21 +0200 | <monochrom> | This one is not too bad. |
2021-09-09 21:31:36 +0200 | System123 | (~System123@165-73-115-78.ip.afrihost.capetown) (Ping timeout: 265 seconds) |
2021-09-09 21:31:50 +0200 | <monochrom> | But by the time you get "(g . ) . (. f)" then yeah, use a pointful lambda. |
2021-09-09 21:32:11 +0200 | <maerwald> | :t (.).(.) |
2021-09-09 21:32:12 +0200 | <lambdabot> | (b -> c) -> (a1 -> a2 -> b) -> a1 -> a2 -> c |
2021-09-09 21:32:44 +0200 | <monochrom> | Unfortunately, playing with category theory too much does lead to "(g . ) . (. f)" |
2021-09-09 21:33:40 +0200 | <awpr> | dimap @(->)? |
2021-09-09 21:34:20 +0200 | <iqubic> | monochrom: I'm actually just using this: "divisible divisor = filter (\n -> n `mod` divisor == 0)" I take a list of numbers and return the same list, but with only the values divisible by divisor. |
2021-09-09 21:34:58 +0200 | <monochrom> | Mathematicians think they have mitigated it with "g_{*} . f^{*}". |
2021-09-09 21:34:59 +0200 | <iqubic> | I'm not sure that making the lambda into a pointfree version will be clearer. |
2021-09-09 21:35:29 +0200 | <monochrom> | That only caused the bigger problem that no one remembers whether g_{*} means (g .) or (. g). |
2021-09-09 21:35:45 +0200 | <monochrom> | In fact, I don't either. I might have mixed them up too. |
2021-09-09 21:35:53 +0200 | tfeb | (~tfb@host86-128-238-44.range86-128.btcentralplus.com) |
2021-09-09 21:36:02 +0200 | <iqubic> | monochrom: I don't know which it is and I don't care. |
2021-09-09 21:36:20 +0200 | <iqubic> | Either way (g .) and (. g) are weird to think about. |
2021-09-09 21:36:27 +0200 | drguildo | (~sjm@user/drguildo) |
2021-09-09 21:36:32 +0200 | <roboguy_> | monochrom: IIRC, different sources have different conventions on those names, to make it even more confusing |
2021-09-09 21:37:16 +0200 | <monochrom> | iqubic: I was not talking to you. |
2021-09-09 21:37:17 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) (Read error: Connection reset by peer) |
2021-09-09 21:37:25 +0200 | <iqubic> | Ah. I'm sorry. |
2021-09-09 21:37:43 +0200 | <monochrom> | I don't care about your divisible either. |
2021-09-09 21:37:46 +0200 | <justsomeguy> | If I want to find out what a file handle is in depth, what it's structure is and what things it keeps track of, where would I read about it? Should I be consulting the C stdlib documentation? |
2021-09-09 21:38:04 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) |
2021-09-09 21:38:35 +0200 | oxide | (~lambda@user/oxide) (Quit: oxide) |
2021-09-09 21:38:52 +0200 | <justsomeguy> | System.IO talks about file handles a little, but it seems like a wrapper around the linux syscalls. |
2021-09-09 21:39:09 +0200 | <monochrom> | Perhaps every time you say something, I should reply "I don't know it and I don't care". Since you seem to like to do the same. |
2021-09-09 21:39:46 +0200 | drguildo | (~sjm@user/drguildo) () |
2021-09-09 21:40:22 +0200 | <maerwald> | my standard answer to support requests |
2021-09-09 21:40:50 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds) |
2021-09-09 21:42:10 +0200 | <monochrom> | justsomeguy: I think GHC.IO.* is a good start. |
2021-09-09 21:42:23 +0200 | <geekosaur> | justsomeguy, there's some documentation in iirc GHC.IO.Handle |
2021-09-09 21:42:26 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) |
2021-09-09 21:43:24 +0200 | <monochrom> | You may also need the backdrop of https://github.com/takenobu-hs/haskell-ghc-illustrated |
2021-09-09 21:43:27 +0200 | mniip | (mniip@libera/staff/mniip) (Ping timeout: 600 seconds) |
2021-09-09 21:43:58 +0200 | mei | (~mei@user/mei) (Ping timeout: 260 seconds) |
2021-09-09 21:44:32 +0200 | <maerwald> | GHC Handles are something entirely different though, no? |
2021-09-09 21:44:36 +0200 | mniip | (mniip@libera/staff/mniip) |
2021-09-09 21:45:05 +0200 | <maerwald> | I mean, compared to File descriptor etc |
2021-09-09 21:45:33 +0200 | <monochrom> | since every time I call getChar (say), it does not translate to a simple blocking FFI call, even disregarding buffering. |
2021-09-09 21:45:39 +0200 | <maerwald> | can get GCed etc |
2021-09-09 21:45:51 +0200 | abhixec | (~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Client Quit) |
2021-09-09 21:46:08 +0200 | <monochrom> | Instead it translates to green-thread rescheduling, I/O manager thingies, etc. |
2021-09-09 21:46:59 +0200 | <monochrom> | But no "descriptor" was mentioned. |
2021-09-09 21:47:21 +0200 | <maerwald> | yeah, Handle is basically something low-level that isn't low-level |
2021-09-09 21:50:12 +0200 | <roboguy_> | GHC Handles do look a bit different than file descriptors, based on the implementation. I always assumed it was a newtype around either an Int or a FILE pointer, but I guess not! |
2021-09-09 21:50:28 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Remote host closed the connection) |
2021-09-09 21:50:43 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 21:51:58 +0200 | <justsomeguy> | GHC.IO.* is pretty helpful so far. File handles seem internally complex, but I probably only have to worry about the operations I do on them and how to open/close them. |
2021-09-09 21:52:23 +0200 | <justsomeguy> | At least that's the impression I get so far. |
2021-09-09 21:52:24 +0200 | tfeb | (~tfb@host86-128-238-44.range86-128.btcentralplus.com) (Quit: died) |
2021-09-09 21:53:18 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 21:54:02 +0200 | justsomeguy | (~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2) |
2021-09-09 21:54:51 +0200 | kayprish | (~kayprish@cable-188-2-153-140.dynamic.sbb.rs) (Read error: Connection reset by peer) |
2021-09-09 21:56:20 +0200 | <Drew[m]> | Every `Handle` contains a `Handle__` which contains a `haDevice` field of an existentially qualified type variable which must be of the typeclass `IODevice` which provides the interface for "I/O operations required for implementing a Handle". There is one instance: `FD` |
2021-09-09 21:56:39 +0200 | <Drew[m]> | https://hackage.haskell.org/package/base-4.15.0.0/docs/GHC-IO-FD.html#t:FD |
2021-09-09 21:56:56 +0200 | <Drew[m]> | There's the file descriptor |
2021-09-09 21:57:14 +0200 | <geekosaur> | a lot of the complexity is being compatible with both windows and posix |
2021-09-09 21:57:52 +0200 | <geekosaur> | since for example a unix socket can be wrapped by a normal filehandle but a windows one can't |
2021-09-09 21:58:13 +0200 | dschrempf | (~dominik@070-207.dynamic.dsl.fonira.net) (Quit: WeeChat 3.2.1) |
2021-09-09 21:58:20 +0200 | <geekosaur> | so it has some extra overhead to be able to handle a winsock handle |
2021-09-09 22:00:15 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 22:01:23 +0200 | acidjnk_new | (~acidjnk@p200300d0c7203080b5211f3083e4cecd.dip0.t-ipconnect.de) |
2021-09-09 22:04:06 +0200 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
2021-09-09 22:04:29 +0200 | mikoto-chan | (~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 252 seconds) |
2021-09-09 22:05:04 +0200 | juhp | (~juhp@128.106.188.220) (Ping timeout: 252 seconds) |
2021-09-09 22:06:30 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.242) |
2021-09-09 22:06:34 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) |
2021-09-09 22:06:43 +0200 | juhp | (~juhp@128.106.188.220) |
2021-09-09 22:07:32 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection) |
2021-09-09 22:12:07 +0200 | acidjnk | (~acidjnk@p200300d0c7203080c0b3f2662aa27c56.dip0.t-ipconnect.de) |
2021-09-09 22:12:12 +0200 | mniip | (mniip@libera/staff/mniip) (Ping timeout: 619 seconds) |
2021-09-09 22:14:15 +0200 | mniip | (mniip@libera/staff/mniip) |
2021-09-09 22:14:52 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 22:15:11 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 22:15:31 +0200 | acidjnk_new | (~acidjnk@p200300d0c7203080b5211f3083e4cecd.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2021-09-09 22:16:34 +0200 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) (Remote host closed the connection) |
2021-09-09 22:16:59 +0200 | _ht | (~quassel@82-169-194-8.biz.kpn.net) (Remote host closed the connection) |
2021-09-09 22:17:37 +0200 | Pickchea | (~private@user/pickchea) |
2021-09-09 22:19:24 +0200 | unit73e | (~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291) |
2021-09-09 22:19:54 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds) |
2021-09-09 22:21:49 +0200 | raehik | (~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) |
2021-09-09 22:21:51 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
2021-09-09 22:22:05 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) |
2021-09-09 22:22:58 +0200 | tlaxkit | (~hexchat@170.253.47.137) (Remote host closed the connection) |
2021-09-09 22:23:12 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 22:23:22 +0200 | tlaxkit | (~hexchat@170.253.47.137) |
2021-09-09 22:24:37 +0200 | tlaxkit | (~hexchat@170.253.47.137) (Remote host closed the connection) |
2021-09-09 22:25:02 +0200 | <lechner> | Hi, does servant allow dynamic APIs? It would be like /name/{database}, where some URLs are redirected and would them presumably have a different type. Any other solution to dynamic redirects is acceptable, too. Thanks! |
2021-09-09 22:25:05 +0200 | <_bin> | Opinions on SQLite packages? sqlite-simple appears to be the best-maintained, but I haven't used it before. |
2021-09-09 22:25:51 +0200 | fendor | (~fendor@77.119.194.245.wireless.dyn.drei.com) (Remote host closed the connection) |
2021-09-09 22:27:52 +0200 | System12_ | (~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) (Quit: Leaving...) |
2021-09-09 22:27:55 +0200 | sm2n | (~sm2n@user/sm2n) |
2021-09-09 22:28:50 +0200 | fendor | (~fendor@77.119.194.245.wireless.dyn.drei.com) |
2021-09-09 22:29:01 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) |
2021-09-09 22:29:35 +0200 | <maerwald> | anything, as long as it's not persistent |
2021-09-09 22:30:33 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 22:31:09 +0200 | <_bin> | maerwald: Huh? |
2021-09-09 22:31:24 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection) |
2021-09-09 22:31:37 +0200 | haykam1 | (~haykam@static.100.2.21.65.clients.your-server.de) |
2021-09-09 22:31:45 +0200 | <maerwald> | @hackage persistent |
2021-09-09 22:31:45 +0200 | <lambdabot> | https://hackage.haskell.org/package/persistent |
2021-09-09 22:32:11 +0200 | <Rembane> | _bin: Pick the simplest one possible, and get something working. |
2021-09-09 22:32:22 +0200 | d34df00d | (~d34df00d@2600:1700:8c60:3a10::3e) |
2021-09-09 22:32:26 +0200 | <Rembane> | _bin: sqlite-simple is probably the simplest one possible. |
2021-09-09 22:32:44 +0200 | shapr | (~user@pool-100-36-247-68.washdc.fios.verizon.net) |
2021-09-09 22:33:23 +0200 | eggplantade | (~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) |
2021-09-09 22:33:38 +0200 | <d34df00d> | Hi folks. |
2021-09-09 22:33:54 +0200 | <_bin> | maerwald: Oh, I thought you meant as long as the database didn't persist and was a bit confused. |
2021-09-09 22:33:54 +0200 | <d34df00d> | What's the right channel about hls? I have a (user) question about whether it supports something. |
2021-09-09 22:33:59 +0200 | <_bin> | Rembane: Sounds good, thanks. |
2021-09-09 22:34:06 +0200 | <unit73e> | @maerwald, what's the problem with persistent? or advantage? I've never used it, just curious. |
2021-09-09 22:34:06 +0200 | <lambdabot> | Unknown command, try @list |
2021-09-09 22:34:11 +0200 | <unit73e> | maerwald, what's the problem with persistent? or advantage? I've never used it, just curious. |
2021-09-09 22:34:34 +0200 | <unit73e> | I always forget that @ thing here is different.. |
2021-09-09 22:35:07 +0200 | <geekosaur> | recent versions of persistent are kinda broken, as I understand it |
2021-09-09 22:35:25 +0200 | <geekosaur> | it also doesn't deliver on its documented promises? |
2021-09-09 22:35:26 +0200 | <maerwald> | it's just awful TH and there are better libraries if you really need handholding |
2021-09-09 22:36:17 +0200 | Guest|41 | (~Guest|41@129.104.98.71) (Quit: Ping timeout (120 seconds)) |
2021-09-09 22:36:24 +0200 | <unit73e> | ok. so it's kind of like most serialization abstractions in other languages that end up being more of a nuisanse than an advantage |
2021-09-09 22:36:38 +0200 | <unit73e> | like JPA in Java |
2021-09-09 22:37:22 +0200 | <Rembane> | It's really hard getting it right. For some reason... |
2021-09-09 22:38:12 +0200 | <unit73e> | yeah just like JPA. JPA does whatever it wants with SQL and lazy/eager transactions when it was supposed to deal with all the problems of ORM translation to SQL. |
2021-09-09 22:38:41 +0200 | <unit73e> | so everyone ends up having to debug what JPA is doing |
2021-09-09 22:40:40 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) (Ping timeout: 252 seconds) |
2021-09-09 22:42:43 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) |
2021-09-09 22:45:07 +0200 | <dsal> | _bin: sqlite-simple is pretty great. Has the features and stuff. |
2021-09-09 22:47:33 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 22:47:44 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 22:49:25 +0200 | nicbk | (~nicbk@user/nicbk) |
2021-09-09 22:53:32 +0200 | <roboguy_> | geekosaur: ah, that makes sense |
2021-09-09 22:53:41 +0200 | <roboguy_> | (about file handles) |
2021-09-09 22:55:12 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 22:55:25 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 22:55:43 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Client Quit) |
2021-09-09 22:55:57 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 22:55:58 +0200 | <geekosaur> | d34df00d, #haskell-language-server I think |
2021-09-09 22:56:54 +0200 | Lord_of_Life_ | (~Lord@user/lord-of-life/x-2819915) |
2021-09-09 22:58:07 +0200 | Lord_of_Life | (~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds) |
2021-09-09 22:58:23 +0200 | favonia | (~favonia@user/favonia) (Ping timeout: 252 seconds) |
2021-09-09 22:59:31 +0200 | Lord_of_Life_ | Lord_of_Life |
2021-09-09 23:01:11 +0200 | <unit73e> | btw I read a bit about Rust and traits are kind of like type classes but not sure how similar |
2021-09-09 23:01:23 +0200 | <unit73e> | seems to be using a system more keen to scala than haskell |
2021-09-09 23:01:39 +0200 | <unit73e> | or swift, has the same kind of type system |
2021-09-09 23:01:43 +0200 | <monochrom> | Yeah. |
2021-09-09 23:02:13 +0200 | <dolio> | Are Rust traits like Scala traits, or something else? |
2021-09-09 23:02:59 +0200 | <unit73e> | I'm not sure. I know kinds are hidden in Rust so I can't tell. |
2021-09-09 23:03:57 +0200 | <awpr> | AIUI traits are almost exactly typeclasses, except that rustc will always monomorphize them (like C++ templates) whereas GHC is willing to pass around pointers to instance records if necessary |
2021-09-09 23:04:43 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) |
2021-09-09 23:06:10 +0200 | <dolio> | Okay, so they're actually like Scala implicits. |
2021-09-09 23:06:30 +0200 | <d34df00d> | geekosaur: thanks! |
2021-09-09 23:07:17 +0200 | <unit73e> | looks like it's like scala implicits, yes, but in Java there's type erasure |
2021-09-09 23:07:28 +0200 | <unit73e> | or JVM to be precise |
2021-09-09 23:07:29 +0200 | <awpr> | I don't see much similarity between traits/typeclasses and implicit params. I guess GHC's implementation of typeclass resolution is a bit like filling an implicit param based on the type? |
2021-09-09 23:07:58 +0200 | <awpr> | leaving aside the fact that Haskell ImplicitParams are a magical typeclass, lol |
2021-09-09 23:08:03 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 23:08:09 +0200 | acidjnk_new | (~acidjnk@p5487d0ba.dip0.t-ipconnect.de) |
2021-09-09 23:08:31 +0200 | brandonh | (brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh) |
2021-09-09 23:08:50 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.242) (Ping timeout: 252 seconds) |
2021-09-09 23:10:53 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.241) |
2021-09-09 23:11:37 +0200 | acidjnk | (~acidjnk@p200300d0c7203080c0b3f2662aa27c56.dip0.t-ipconnect.de) (Ping timeout: 252 seconds) |
2021-09-09 23:12:35 +0200 | mikoto-chan | (~mikoto-ch@83.137.2.241) (Client Quit) |
2021-09-09 23:13:17 +0200 | neo2 | (~neo3@cpe-292712.ip.primehome.com) |
2021-09-09 23:13:22 +0200 | <unit73e> | I guess it's similar more on implicit functions, where you add functionality. |
2021-09-09 23:13:35 +0200 | <unit73e> | the similarities are much more clear in rust vs haskell |
2021-09-09 23:14:02 +0200 | <unit73e> | because scala has a complex mixed bag of everything |
2021-09-09 23:14:36 +0200 | <unit73e> | so rustc monomorphizes everything but doesn't that end up being more limited? that's the part I'm wondering |
2021-09-09 23:14:50 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 23:15:05 +0200 | <awpr> | yeah, I don't know enough Scala to be of much use there. just a moderate level of Rust knowledge and plenty of Haskell |
2021-09-09 23:15:18 +0200 | shriekingnoise_ | (~shrieking@186.137.144.80) |
2021-09-09 23:15:48 +0200 | <awpr> | Rust does have a trait-based dynamic dispatch feature, but it's more like C++ objects with vtables rather than Haskell's polymorphic code with instance records |
2021-09-09 23:15:49 +0200 | thyriaen | (~thyriaen@x4db77b69.dyn.telefonica.de) (Quit: Leaving) |
2021-09-09 23:15:49 +0200 | mikoto-c1 | (~mikoto-ch@83.137.2.241) |
2021-09-09 23:15:49 +0200 | proofofkeags_ | (~proofofke@205.209.28.54) |
2021-09-09 23:15:49 +0200 | yaroot9 | (~yaroot@125.30.3.6) |
2021-09-09 23:15:49 +0200 | proofofkeags | (~proofofke@205.209.28.54) (Read error: Connection reset by peer) |
2021-09-09 23:15:49 +0200 | shriekingnoise | (~shrieking@186.137.144.80) (Read error: Connection reset by peer) |
2021-09-09 23:16:09 +0200 | <unit73e> | to be it's just kind of interesting. haskell syntax is much more cleaner than rust for sure and doesn't allow mixed paradigms that end up resulting in newbies making not so great code. |
2021-09-09 23:16:22 +0200 | neo1 | (~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 260 seconds) |
2021-09-09 23:16:22 +0200 | cheater | (~Username@user/cheater) (Ping timeout: 260 seconds) |
2021-09-09 23:16:22 +0200 | yaroot | (~yaroot@6.3.30.125.dy.iij4u.or.jp) (Ping timeout: 260 seconds) |
2021-09-09 23:16:22 +0200 | yaroot9 | yaroot |
2021-09-09 23:16:42 +0200 | cheater | (~Username@user/cheater) |
2021-09-09 23:16:45 +0200 | <awpr> | to be more specific Rust monomorphizes all generic functions, and in the process of doing that, it resolves all the trait dispatch |
2021-09-09 23:17:35 +0200 | <awpr> | if that becomes a limitation, there's "trait objects", which take a trait and turn it into a type of objects with vtables |
2021-09-09 23:17:50 +0200 | <awpr> | in which case the function isn't generic, it just takes a trait object parameter |
2021-09-09 23:18:12 +0200 | favonia | (~favonia@user/favonia) |
2021-09-09 23:19:59 +0200 | <unit73e> | at least C++ finally has competition |
2021-09-09 23:20:06 +0200 | <unit73e> | in pratice |
2021-09-09 23:20:19 +0200 | <unit73e> | not just in theory |
2021-09-09 23:21:06 +0200 | <awpr> | yeah, Rust is a huge leap forward IMO. it feels like Haskell's type system with C++' capacity for manual control |
2021-09-09 23:21:35 +0200 | ubert | (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) (Quit: ubert) |
2021-09-09 23:21:36 +0200 | <maerwald[m]> | Rust has HKT? |
2021-09-09 23:21:52 +0200 | ubert | (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) |
2021-09-09 23:22:03 +0200 | <Rembane> | maerwald[m]: Nope, they've carefully avoided adding them for many years now. |
2021-09-09 23:22:19 +0200 | <awpr> | Rust has all kinds of Haskell features, but they're always very careful not to call anything by its Haskell name when adding it to Rust |
2021-09-09 23:22:42 +0200 | <maerwald[m]> | So it's barely Haskell type system, except for ADTs |
2021-09-09 23:23:31 +0200 | <awpr> | parametric-ish polymorphism, typeclasses, ADTs, it's pretty similar to basic level Haskell |
2021-09-09 23:23:53 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection) |
2021-09-09 23:23:56 +0200 | <roboguy_> | Rembane: is there a resource that gives info on why they've avoided them? I've never used Rust, but I've heard about that and I've always wondered |
2021-09-09 23:24:04 +0200 | <maerwald[m]> | Monads are basic, are they not? |
2021-09-09 23:24:28 +0200 | <unit73e> | I'd say so but in the functional programming world. in imperative you can cheat |
2021-09-09 23:24:58 +0200 | <unit73e> | that's the part I don't like in Rust |
2021-09-09 23:25:09 +0200 | <unit73e> | but than it would be called Haskell |
2021-09-09 23:25:41 +0200 | <awpr> | sure, I guess a more reasonable phrasing would be that it feels a lot more comfortable coming from Haskell than C++ does |
2021-09-09 23:25:42 +0200 | <roboguy_> | monads don't have the best PR in some circles, which is pretty unfortunate |
2021-09-09 23:26:03 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha) |
2021-09-09 23:26:18 +0200 | amitnjha | (~amit@024-216-124-116.res.spectrum.com) |
2021-09-09 23:26:38 +0200 | ubert | (~Thunderbi@178.115.42.105.wireless.dyn.drei.com) (Ping timeout: 265 seconds) |
2021-09-09 23:26:50 +0200 | <unit73e> | in my crappy anedoctal experience newbies always try to somehow pretend monads are like the ; of purely functional programming and that's part of the bad PR |
2021-09-09 23:26:56 +0200 | <Rembane> | roboguy_: They went for some other design choices that gave them almost the same power but without letting loose the powers of HKTs, there were some years ago now that I looked into it, so I don't remember. |
2021-09-09 23:27:30 +0200 | jpds | (~jpds@gateway/tor-sasl/jpds) |
2021-09-09 23:28:06 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
2021-09-09 23:28:11 +0200 | chisui | (~chisui@200116b868aa4700d8770583f0c423d2.dip.versatel-1u1.de) (Quit: Client closed) |
2021-09-09 23:28:14 +0200 | jess | (~jess@libera/staff/jess) |
2021-09-09 23:28:21 +0200 | takuan | (~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection) |
2021-09-09 23:28:32 +0200 | <roboguy_> | it really feels like there should be a good way to improve the situation with monad PR, but I'm not quite sure how. kinda frustrating! |
2021-09-09 23:29:09 +0200 | <unit73e> | I just used monads until I understood how it works lol |
2021-09-09 23:29:12 +0200 | <sm> | > I always forget that @ thing here is different.. |
2021-09-09 23:29:12 +0200 | <sm> | same here.. it would be nice if lambdabot used ! instead |
2021-09-09 23:29:13 +0200 | <lambdabot> | <hint>:1:17: error: |
2021-09-09 23:29:13 +0200 | <lambdabot> | Pattern syntax in expression context: that@thing |
2021-09-09 23:29:13 +0200 | <lambdabot> | Did you mean to enable TypeApplications? |
2021-09-09 23:29:25 +0200 | <awpr> | lol |
2021-09-09 23:29:38 +0200 | <sm> | bot wins again :) |
2021-09-09 23:30:02 +0200 | <geekosaur> | lb actually has ? as an alternative |
2021-09-09 23:30:18 +0200 | <sm> | @nick is something that is just going to keep happening for ever |
2021-09-09 23:30:28 +0200 | <geekosaur> | but I don't think you can disable @ |
2021-09-09 23:31:12 +0200 | <yushyin> | it's a good reminder that this is IRC |
2021-09-09 23:31:16 +0200 | <unit73e> | I'd just leave it. It's not annoying enough. It's like the "return" of IRC for people that come from C like languages. |
2021-09-09 23:31:50 +0200 | <unit73e> | you learn in 5 min that it's not the same |
2021-09-09 23:32:20 +0200 | <sm> | more people will be viewing this channel from matrix than IRC . Already are, perhaps |
2021-09-09 23:32:20 +0200 | <geekosaur> | eh, I see folks who ought to be used to IRC make the same mistake |
2021-09-09 23:32:31 +0200 | <sm> | I do it regularly and I'm trying not to |
2021-09-09 23:32:33 +0200 | <geekosaur> | often folks who spend more time on matrix than direct irc |
2021-09-09 23:32:46 +0200 | <roboguy_> | hmm is there a Discord version of lambdabot? I looked a little while ago and I didn't see anything |
2021-09-09 23:33:10 +0200 | <geekosaur> | iirc there have been a few attempts at one but no success yet |
2021-09-09 23:33:14 +0200 | <hpc> | [~geekosaur] real nerds use jira markup |
2021-09-09 23:33:14 +0200 | <sm> | and > is just too valuable a convention for quoting replies |
2021-09-09 23:33:28 +0200 | <mangoiv> | There's a bot in the haskell discord which is pretty good as far as I can tell. |
2021-09-09 23:33:46 +0200 | <geekosaur> | there was at one point an attempt to refactor lb itself to better support alternatives but it failed, irc's too deeply woven into it |
2021-09-09 23:34:00 +0200 | <roboguy_> | ah, I didn't even know there was a Haskell discord. I wonder if the bot could be used in other servers |
2021-09-09 23:34:10 +0200 | wonko | (~wjc@62.115.229.50) (Ping timeout: 252 seconds) |
2021-09-09 23:34:19 +0200 | <mangoiv> | *FP discord (for me it's the haskell discord tho :D) |
2021-09-09 23:34:23 +0200 | <roboguy_> | ah, hah |
2021-09-09 23:34:47 +0200 | <mangoiv> | is it allowed/considered good practise to share links here? |
2021-09-09 23:35:02 +0200 | <mangoiv> | if so, I'd send an invite. |
2021-09-09 23:35:10 +0200 | <roboguy_> | I think I found it |
2021-09-09 23:37:53 +0200 | <unit73e> | to bad discord has insane rules imo. you can be banned for any reason discord feels like. it's not uncommon for you to be banned simply because you were in a server discord doesn't like. |
2021-09-09 23:39:05 +0200 | merijn | (~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds) |
2021-09-09 23:39:47 +0200 | michalz | (~michalz@185.246.204.37) (Remote host closed the connection) |
2021-09-09 23:39:51 +0200 | <ldlework> | I'm doing the "Keypad translator" exercise in HFFP and it's throwing me for a loop |
2021-09-09 23:40:31 +0200 | sneedsfeed | (~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds) |
2021-09-09 23:41:36 +0200 | <roboguy_> | unit73e: I've heard that. I mainly use it to talk with some of my friends, although I'm in a couple of other servers that I rarely really look at (which is why I'm wondering if the bot could be used in other servers) |
2021-09-09 23:41:59 +0200 | <roboguy_> | ldlework: literally? |
2021-09-09 23:44:49 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) |
2021-09-09 23:44:49 +0200 | wroathe | (~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host) |
2021-09-09 23:44:49 +0200 | wroathe | (~wroathe@user/wroathe) |
2021-09-09 23:46:23 +0200 | <ldlework> | roboguy_: my head just hurts |
2021-09-09 23:46:40 +0200 | <ldlework> | I think I need a function which will parse runs of characters or something. |
2021-09-09 23:46:53 +0200 | <ldlework> | The challenge seems quite harder than the rest nearby lol |
2021-09-09 23:48:49 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) |
2021-09-09 23:49:08 +0200 | mangoiv | (~MangoIV@193.175.5.172) (Quit: WeeChat 3.2) |
2021-09-09 23:49:19 +0200 | mangoiv | (~MangoIV@193.175.5.172) |
2021-09-09 23:50:24 +0200 | gehmehgeh | (~user@user/gehmehgeh) (Quit: Leaving) |
2021-09-09 23:52:04 +0200 | <roboguy_> | ldlework: did you try to write that function? |
2021-09-09 23:52:15 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds) |
2021-09-09 23:52:21 +0200 | <ldlework> | i'm trying to think about how it might work |
2021-09-09 23:52:33 +0200 | <ldlework> | I'm thinking that maybe mapAccumL could work? |
2021-09-09 23:52:39 +0200 | <ldlework> | create some kind of type to hold the parsing state |
2021-09-09 23:52:50 +0200 | fendor | (~fendor@77.119.194.245.wireless.dyn.drei.com) (Read error: Connection reset by peer) |
2021-09-09 23:53:29 +0200 | <ldlework> | when the letter changes to the one we've been seeing, then translate the number of consecutive characters (5555) into the corresponding keypad character, then establish the newly seen character as the one to expect on the next iteration |
2021-09-09 23:53:30 +0200 | <ldlework> | something like this |
2021-09-09 23:53:50 +0200 | <ldlework> | changes from the one we've been seeing* |
2021-09-09 23:54:58 +0200 | chisui | (~chisui@2001:16b8:68aa:4700:b819:7f5a:e91c:7e7c) |
2021-09-09 23:55:35 +0200 | <awpr> | it might be more beneficial to do it without this, but I coincidentally just publish a package that'd make this easier |
2021-09-09 23:55:38 +0200 | MQ-17J | (~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds) |
2021-09-09 23:55:39 +0200 | <awpr> | @hackage rle |
2021-09-09 23:55:39 +0200 | <lambdabot> | https://hackage.haskell.org/package/rle |
2021-09-09 23:56:23 +0200 | <ldlework> | hehe |
2021-09-09 23:56:25 +0200 | <roboguy_> | ldlework: you might try implementing it directly at first, without something like mapAccumL. A helper function will likely be useful |
2021-09-09 23:56:56 +0200 | <ldlework> | roboguy_: in the past days, I have implemented other challenges which were refactored with mapAccumL as per the advice of some in here |
2021-09-09 23:56:56 +0200 | <mangoiv> | Can anybody tell me whether there are efforts being made to get haskell running on microcontrollers? I know on old ones it was probably not feasible, but maybe more modern ones? |
2021-09-09 23:57:08 +0200 | <ldlework> | roboguy_: so I have that badge already |
2021-09-09 23:57:39 +0200 | <ldlework> | hehe |
2021-09-09 23:59:02 +0200 | ec_ | (~ec@gateway/tor-sasl/ec) |
2021-09-09 23:59:05 +0200 | <geekosaur> | mangoiv, microcontrollers are probably not appropriate since haskell needs garbage collection |
2021-09-09 23:59:18 +0200 | Pickchea | (~private@user/pickchea) (Ping timeout: 260 seconds) |
2021-09-09 23:59:23 +0200 | <roboguy_> | mangoiv: I don't know if this counts as too old, but there is Haskino |
2021-09-09 23:59:24 +0200 | hololeap | (~hololeap@user/hololeap) (Ping timeout: 276 seconds) |
2021-09-09 23:59:48 +0200 | hololeap | (~hololeap@user/hololeap) |