2021/09/09

2021-09-09 00:03:07 +0200infinity0(~infinity0@occupy.ecodis.net) (Remote host closed the connection)
2021-09-09 00:03:27 +0200cjb(~cjb@user/cjb) (Quit: cjb)
2021-09-09 00:04:34 +0200infinity0(~infinity0@occupy.ecodis.net)
2021-09-09 00:04:36 +0200spaceshipnow(~spaceship@65.100.53.74)
2021-09-09 00:08:22 +0200infinity0(~infinity0@occupy.ecodis.net) (Remote host closed the connection)
2021-09-09 00:08:24 +0200spaceshipnow(~spaceship@65.100.53.74) (Client Quit)
2021-09-09 00:08:40 +0200spaceshipnow(~spaceship@65.100.53.74)
2021-09-09 00:09:42 +0200infinity0(~infinity0@occupy.ecodis.net)
2021-09-09 00:11:14 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 00:12:04 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 00:12:17 +0200amitnjha(~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 +0200cjb(~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 +0200TranquilEcho(~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 +0200harveypwca(~harveypwc@2601:246:c180:a570:2435:ba7:e573:bc26) (Quit: Leaving)
2021-09-09 00:19:43 +0200lambdabot(~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection)
2021-09-09 00:19:55 +0200 <geekosaur> hm
2021-09-09 00:19:55 +0200lambdabot(~lambdabot@silicon.int-e.eu)
2021-09-09 00:19:56 +0200lambdabot(~lambdabot@silicon.int-e.eu) (Changing host)
2021-09-09 00:19:56 +0200lambdabot(~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 +0200spaceshipnow(~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 +0200MQ-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 +0200MQ-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 +0200themc47mc47
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 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
2021-09-09 00:33:36 +0200abhixec(~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 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 00:37:21 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2021-09-09 00:39:33 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds)
2021-09-09 00:40:13 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection)
2021-09-09 00:40:19 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2021-09-09 00:40:55 +0200Neuromancer(~Neuromanc@user/neuromancer) (Remote host closed the connection)
2021-09-09 00:41:08 +0200hololeap(~hololeap@user/hololeap)
2021-09-09 00:42:30 +0200son0p(~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
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 +0200acidjnk_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 +0200hololeap(~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 +0200acidjnk_new3(~acidjnk@p200300d0c7203089886436e542e4e0a8.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-09-09 00:51:42 +0200cjb(~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 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
2021-09-09 00:56:50 +0200sleblanc(~sleblanc@user/sleblanc)
2021-09-09 00:57:24 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 00:57:39 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 00:57:43 +0200jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2021-09-09 00:58:03 +0200Tuplanolla(~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 +0200jakalx(~jakalx@base.jakalx.net)
2021-09-09 01:00:25 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 01:03:22 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-09-09 01:06:19 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-09-09 01:06:57 +0200ec_(~ec@gateway/tor-sasl/ec) (Remote host closed the connection)
2021-09-09 01:07:09 +0200philpax_(uid516926@id-516926.lymington.irccloud.com)
2021-09-09 01:07:27 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6)
2021-09-09 01:11:37 +0200acidjnk_new(~acidjnk@p200300d0c7203089886436e542e4e0a8.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-09-09 01:12:54 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds)
2021-09-09 01:13:15 +0200aarvar(~aaron@2601:602:a080:fa0:6eb5:629b:8150:a841) (Read error: Connection reset by peer)
2021-09-09 01:14:09 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection)
2021-09-09 01:14:12 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 01:17:47 +0200acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net) (Quit: Leaving.)
2021-09-09 01:18:55 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-09 01:21:49 +0200nvmd(~nvmd@user/nvmd) (Quit: Later, nerds.)
2021-09-09 01:22:13 +0200zaquest(~notzaques@5.128.210.178) (Remote host closed the connection)
2021-09-09 01:22:53 +0200cjb(~cjbayliss@user/cjb)
2021-09-09 01:23:29 +0200zaquest(~notzaques@5.128.210.178)
2021-09-09 01:28:35 +0200MQ-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 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 01:33:18 +0200MQ-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 +0200Gurkenglas(~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de) (Ping timeout: 265 seconds)
2021-09-09 01:34:28 +0200neo1(~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 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 01:39:09 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 01:39:09 +0200wroathe(~wroathe@user/wroathe)
2021-09-09 01:41:45 +0200 <iqubic> Why does that work?
2021-09-09 01:43:04 +0200dextaa(~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 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Remote host closed the connection)
2021-09-09 01:53:43 +0200phma(~phma@host-67-44-208-98.hnremote.net) (Read error: Connection reset by peer)
2021-09-09 01:54:12 +0200mikoto-chan(~mikoto-ch@83.137.2.250) (Ping timeout: 265 seconds)
2021-09-09 01:54:55 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds)
2021-09-09 01:56:13 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-09-09 01:56:55 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-09 01:57:05 +0200janat08(uid374565@id-374565.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-09 01:58:21 +0200aegon(~mike@174.127.249.180)
2021-09-09 02:01:17 +0200phma(~phma@host-67-44-208-177.hnremote.net)
2021-09-09 02:02:40 +0200cptaffe(~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 +0200merijn(~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 +0200pzanco(~Android@187.104.158.159)
2021-09-09 02:13:24 +0200cheater(~Username@user/cheater) (Remote host closed the connection)
2021-09-09 02:13:52 +0200pzanco(~Android@187.104.158.159) (Client Quit)
2021-09-09 02:14:33 +0200eggplantade(~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 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 02:17:59 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 02:19:10 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds)
2021-09-09 02:20:53 +0200cheater(~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 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
2021-09-09 02:21:36 +0200MQ-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 +0200Codaraxis(~Codaraxis@user/codaraxis)
2021-09-09 02:24:52 +0200acarrico(~acarrico@dhcp-68-142-39-249.greenmountainaccess.net)
2021-09-09 02:28:35 +0200pbrisbin(~patrick@pool-108-16-214-93.phlapa.fios.verizon.net) (Ping timeout: 252 seconds)
2021-09-09 02:32:14 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds)
2021-09-09 02:33:05 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 02:33:19 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 02:34:37 +0200luc03(~a@p200300ef970830a990422b88d9bc8098.dip0.t-ipconnect.de) (Ping timeout: 245 seconds)
2021-09-09 02:34:41 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 02:34:59 +0200luc03(~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de)
2021-09-09 02:42:34 +0200abraham(~abraham@191.96.121.37) (Quit: Textual IRC Client: www.textualapp.com)
2021-09-09 03:04:08 +0200roboguy_(~roboguy_@cpe-98-156-4-161.kc.res.rr.com)
2021-09-09 03:05:28 +0200otto_s(~user@p5b044f3a.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-09-09 03:10:28 +0200hannessteffenhag(~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de)
2021-09-09 03:10:45 +0200neurocyte6(~neurocyte@user/neurocyte)
2021-09-09 03:13:10 +0200neurocyte(~neurocyte@user/neurocyte) (Ping timeout: 252 seconds)
2021-09-09 03:13:11 +0200neurocyte6neurocyte
2021-09-09 03:15:10 +0200hannessteffenhag(~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2021-09-09 03:15:27 +0200dextaa(~DV@user/dextaa)
2021-09-09 03:22:42 +0200zebrag(~chris@user/zebrag) (Quit: Konversation terminated!)
2021-09-09 03:24:10 +0200xff0x(~xff0x@port-92-195-70-241.dynamic.as20676.net) (Ping timeout: 252 seconds)
2021-09-09 03:26:07 +0200xff0x(~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 +0200vysn(~vysn@user/vysn) (Ping timeout: 252 seconds)
2021-09-09 03:29:25 +0200neo1(~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 265 seconds)
2021-09-09 03:29:25 +0200proofofkeags(~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 +0200thetoloachekid(~ttk@189.147.153.136)
2021-09-09 03:38:48 +0200cjb(~cjbayliss@user/cjb) ()
2021-09-09 03:41:29 +0200cjb(~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 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 03:51:35 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-09-09 03:51:37 +0200alx741(~alx741@186.178.109.214) (Quit: alx741)
2021-09-09 03:53:17 +0200cods(~fred@82-65-232-44.subs.proxad.net) (Ping timeout: 252 seconds)
2021-09-09 03:53:25 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 03:53:38 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 03:55:58 +0200sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds)
2021-09-09 03:59:12 +0200cods(~fred@82-65-232-44.subs.proxad.net)
2021-09-09 04:00:05 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 04:02:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 04:05:58 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Ping timeout: 252 seconds)
2021-09-09 04:06:03 +0200ephemient(uid407513@id-407513.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2021-09-09 04:08:02 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643)
2021-09-09 04:08:46 +0200sim590(~simon@modemcable090.207-203-24.mc.videotron.ca)
2021-09-09 04:15:19 +0200td_(~td@94.134.91.19) (Ping timeout: 252 seconds)
2021-09-09 04:16:39 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6)
2021-09-09 04:16:56 +0200Sgeo_(~Sgeo@user/sgeo)
2021-09-09 04:17:18 +0200td_(~td@94.134.91.64)
2021-09-09 04:17:22 +0200Sgeo(~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 +0200eggplantade(~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 +0200thetoloachekid(~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 +0200sidbendu(~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 +0200sneedsfeed(~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 +0200merijn(~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 +0200shiraeeshi(~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 +0200haykam(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-09-09 04:46:23 +0200haykam1(~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 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 04:49:21 +0200Vajb(~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 +0200pretty_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 +0200myShoggoth(~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 +0200dtman34(~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 +0200sleblanc(~sleblanc@user/sleblanc) (Ping timeout: 260 seconds)
2021-09-09 04:59:09 +0200dtman34(~dtman34@c-73-62-246-247.hsd1.mn.comcast.net)
2021-09-09 04:59:50 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2021-09-09 05:00:01 +0200haasn(~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 +0200eggplantade(~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 +0200haasn(~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 +0200tddschn(~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 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 05:08:58 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 05:10:29 +0200hololeap(~hololeap@user/hololeap)
2021-09-09 05:10:32 +0200hololeap(~hololeap@user/hololeap) (Remote host closed the connection)
2021-09-09 05:11:03 +0200hololeap(~hololeap@user/hololeap)
2021-09-09 05:13:28 +0200iqubic(~user@2601:602:9502:c70:af68:e4d7:d422:2ae6) (Remote host closed the connection)
2021-09-09 05:16:20 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca) (Ping timeout: 252 seconds)
2021-09-09 05:17:10 +0200gabiruh(~gabiruh@vps19177.publiccloud.com.br) (Ping timeout: 240 seconds)
2021-09-09 05:19:03 +0200gabiruh(~gabiruh@vps19177.publiccloud.com.br)
2021-09-09 05:27:15 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd) (Ping timeout: 260 seconds)
2021-09-09 05:27:23 +0200justsomeguy(~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 +0200neo1(~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 +0200hgolden(~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Quit: Konversation terminated!)
2021-09-09 05:48:44 +0200tddschn(~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 +0200slowButPresent(~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 +0200pavonia(~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 +0200tddschn(~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 +0200dyeplexer(~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 +0200ubert(~Thunderbi@178.115.77.119.wireless.dyn.drei.com)
2021-09-09 06:09:04 +0200lavaman(~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 +0200ubert(~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 +0200ubert(~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 +0200lavaman(~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 +0200ubert(~Thunderbi@178.115.77.119.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-09-09 06:18:06 +0200cods(~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 +0200hyiltiz(~quassel@31.220.5.250) (Ping timeout: 252 seconds)
2021-09-09 06:23:46 +0200tddschn(~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 +0200tddschn(~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 +0200justsomeguy(~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 +0200hyiltiz(~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 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 06:34:05 +0200amitnjha(~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 +0200amitnjha(~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 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 06:43:15 +0200aratamizuki(~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 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 06:47:38 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 06:51:14 +0200tddschn(~textual@45.77.71.205) (Remote host closed the connection)
2021-09-09 06:54:26 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 06:54:45 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 06:56:14 +0200tddschn(~textual@45.77.71.205)
2021-09-09 06:56:24 +0200mikoto-chan(~mikoto-ch@83.137.2.242)
2021-09-09 06:58:49 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2021-09-09 06:59:10 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net) (Ping timeout: 260 seconds)
2021-09-09 07:01:30 +0200iqubic(~user@2601:602:9502:c70:17b6:d303:f703:d0d7)
2021-09-09 07:01:41 +0200mishugana(~mishugana@user/mishugana)
2021-09-09 07:02:05 +0200mikoto-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 +0200roboguy_(~roboguy_@cpe-98-156-4-161.kc.res.rr.com) ()
2021-09-09 07:03:54 +0200tddschn(~textual@45.77.71.205) (Remote host closed the connection)
2021-09-09 07:05:08 +0200tddschn(~textual@45.77.71.205)
2021-09-09 07:06:46 +0200tddschn(~textual@45.77.71.205) (Remote host closed the connection)
2021-09-09 07:06:48 +0200mishugana(~mishugana@user/mishugana) (Quit: leaving)
2021-09-09 07:07:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 07:07:42 +0200hannessteffenhag(~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 +0200cods(~fred@82-65-232-44.subs.proxad.net)
2021-09-09 07:14:46 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 07:15:00 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 07:15:49 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-09 07:16:14 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-09 07:17:48 +0200aman(~aman@user/aman)
2021-09-09 07:21:51 +0200Sgeo_(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2021-09-09 07:23:47 +0200oxide(~lambda@user/oxide)
2021-09-09 07:24:02 +0200mikoto-chan(~mikoto-ch@83.137.2.250)
2021-09-09 07:25:17 +0200fendor(~fendor@178.165.191.44.wireless.dyn.drei.com)
2021-09-09 07:25:56 +0200rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com)
2021-09-09 07:27:47 +0200tomku(~tomku@user/tomku) (Ping timeout: 252 seconds)
2021-09-09 07:34:38 +0200hannessteffenhag(~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de) (Ping timeout: 260 seconds)
2021-09-09 07:37:43 +0200zmt00(~zmt00@user/zmt00) (Ping timeout: 252 seconds)
2021-09-09 07:38:14 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 252 seconds)
2021-09-09 07:38:32 +0200cjb(~cjbayliss@user/cjb) (Ping timeout: 260 seconds)
2021-09-09 07:39:17 +0200sm2n(~sm2n@user/sm2n) (Ping timeout: 245 seconds)
2021-09-09 07:40:14 +0200rekahsoft(~rekahsoft@cpe0008a20f982f-cm64777d666260.cpe.net.cable.rogers.com) (Ping timeout: 260 seconds)
2021-09-09 07:41:38 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-09-09 07:43:05 +0200hannessteffenhag(~hannesste@ip4d14ffd8.dynamic.kabel-deutschland.de)
2021-09-09 07:47:02 +0200aegon(~mike@174.127.249.180) (Quit: leaving)
2021-09-09 07:48:03 +0200tddschn(~textual@45.77.71.205)
2021-09-09 07:50:45 +0200mikoto-chan(~mikoto-ch@83.137.2.250) (Quit: mikoto-chan)
2021-09-09 07:51:42 +0200Gurkenglas(~Gurkengla@dslb-002-207-014-195.002.207.pools.vodafone-ip.de)
2021-09-09 07:52:36 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik)
2021-09-09 07:52:41 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 07:53:13 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 07:57:44 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 07:57:45 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 07:57:45 +0200wroathe(~wroathe@user/wroathe)
2021-09-09 07:58:40 +0200ubert(~Thunderbi@91.141.58.198.wireless.dyn.drei.com)
2021-09-09 07:59:24 +0200hgolden(~hgolden2@cpe-172-114-84-61.socal.res.rr.com)
2021-09-09 08:01:37 +0200burnsidesLlama(~burnsides@client-8-76.eduroam.oxuni.org.uk)
2021-09-09 08:02:06 +0200echoreply(~echoreply@45.32.163.16) (Quit: WeeChat 2.8)
2021-09-09 08:02:30 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-09 08:03:27 +0200echoreply(~echoreply@45.32.163.16)
2021-09-09 08:03:30 +0200burnsidesLlama(~burnsides@client-8-76.eduroam.oxuni.org.uk) (Read error: Connection reset by peer)
2021-09-09 08:03:48 +0200burnsidesLlama(~burnsides@client-8-76.eduroam.oxuni.org.uk)
2021-09-09 08:05:00 +0200renzhi(~xp@2607:fa49:6500:3d00::5f4a) (Ping timeout: 256 seconds)
2021-09-09 08:05:13 +0200oxide(~lambda@user/oxide) (Ping timeout: 252 seconds)
2021-09-09 08:05:26 +0200Vajb(~Vajb@hag-jnsbng11-58c3ab-85.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 08:06:12 +0200Vajb(~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi)
2021-09-09 08:06:54 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-09 08:08:13 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 08:08:14 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 08:08:14 +0200wroathe(~wroathe@user/wroathe)
2021-09-09 08:08:32 +0200burnside_(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 08:10:23 +0200peterhil(~peterhil@84.251.82.57)
2021-09-09 08:11:14 +0200burnsidesLlama(~burnsides@client-8-76.eduroam.oxuni.org.uk) (Ping timeout: 252 seconds)
2021-09-09 08:13:08 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-09 08:15:04 +0200peterhil(~peterhil@84.251.82.57) (Ping timeout: 265 seconds)
2021-09-09 08:15:11 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 08:15:23 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 08:18:31 +0200renzhi(~xp@modemcable070.17-177-173.mc.videotron.ca)
2021-09-09 08:20:48 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2021-09-09 08:20:50 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-09 08:22:11 +0200hgolden(~hgolden2@cpe-172-114-84-61.socal.res.rr.com) (Quit: Konversation terminated!)
2021-09-09 08:25:22 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:5bfd:35e:da52:7e46)
2021-09-09 08:25:44 +0200ub(~Thunderbi@91.141.53.92.wireless.dyn.drei.com)
2021-09-09 08:26:07 +0200thornAvery(~thornAver@2401:c080:1800:4346:cb:55f4:6eab:8e22) (Ping timeout: 240 seconds)
2021-09-09 08:27:44 +0200ubert(~Thunderbi@91.141.58.198.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2021-09-09 08:27:44 +0200ububert
2021-09-09 08:29:20 +0200tomku(~tomku@user/tomku)
2021-09-09 08:29:33 +0200qbt(~edun@user/edun)
2021-09-09 08:30:05 +0200tddschn(~textual@45.77.71.205) (Quit: tddschn)
2021-09-09 08:32:28 +0200neo1(~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 +0200gioyik(~gioyik@gateway/tor-sasl/gioyik) (Quit: WeeChat 3.1)
2021-09-09 08:36:12 +0200jinsun(~quassel@user/jinsun) (Read error: Connection reset by peer)
2021-09-09 08:38:40 +0200chele(~chele@user/chele)
2021-09-09 08:39:10 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be)
2021-09-09 08:41:33 +0200burnside_(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection)
2021-09-09 08:41:36 +0200jinsun(~quassel@user/jinsun)
2021-09-09 08:41:38 +0200jinsun__(~quassel@user/jinsun)
2021-09-09 08:42:35 +0200Erutuon(~Erutuon@user/erutuon) (Ping timeout: 252 seconds)
2021-09-09 08:43:12 +0200jinsun__(~quassel@user/jinsun) (Client Quit)
2021-09-09 08:45:53 +0200sim590(~simon@modemcable090.207-203-24.mc.videotron.ca) (Ping timeout: 252 seconds)
2021-09-09 08:47:36 +0200gehmehgeh(~user@user/gehmehgeh)
2021-09-09 08:51:59 +0200Vajb(~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-09 08:52:10 +0200Vajb(~Vajb@88.195.168.176)
2021-09-09 09:01:03 +0200kuribas(~user@ptr-25vy0i7s9yl7nzqhecr.18120a2.ip6.access.telenet.be)
2021-09-09 09:02:28 +0200mc47(~mc47@xmonad/TheMC47)
2021-09-09 09:04:50 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 09:05:01 +0200hueso(~root@user/hueso) (Ping timeout: 250 seconds)
2021-09-09 09:08:18 +0200michalz(~michalz@185.246.204.37)
2021-09-09 09:10:27 +0200monochrom(trebla@216.138.220.146) (Quit: NO CARRIER)
2021-09-09 09:12:06 +0200beka(~beka@104.193.170.240) (Ping timeout: 265 seconds)
2021-09-09 09:12:17 +0200kstuart(~kstuart@85.203.34.2)
2021-09-09 09:16:47 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 09:17:08 +0200shriekingnoise(~shrieking@186.137.144.80) (Quit: Quit)
2021-09-09 09:19:50 +0200ubert(~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-09-09 09:20:55 +0200ubert(~Thunderbi@91.141.53.92.wireless.dyn.drei.com)
2021-09-09 09:21:30 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-09-09 09:25:28 +0200wonko(~wjc@62.115.229.50)
2021-09-09 09:28:31 +0200jtomas(~jtomas@95.red-88-11-64.dynamicip.rima-tde.net)
2021-09-09 09:31:05 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Remote host closed the connection)
2021-09-09 09:31:46 +0200kstuart(~kstuart@85.203.34.2) (Remote host closed the connection)
2021-09-09 09:34:28 +0200ub(~Thunderbi@91.141.53.92.wireless.dyn.drei.com)
2021-09-09 09:35:55 +0200zer0bitz(~zer0bitz@dsl-hkibng31-58c384-213.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 09:38:05 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-09-09 09:43:03 +0200monochrom(trebla@216.138.220.146)
2021-09-09 09:45:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 09:45:42 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-09-09 09:49:36 +0200max22-(~maxime@2a01cb08833598007f934d16e3231d2d.ipv6.abo.wanadoo.fr)
2021-09-09 09:50:17 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 265 seconds)
2021-09-09 09:54:20 +0200Cajun(~Cajun@user/cajun)
2021-09-09 09:56:34 +0200cfricke(~cfricke@user/cfricke)
2021-09-09 09:58:00 +0200acidjnk(~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 +0200vysn(~vysn@user/vysn)
2021-09-09 10:01:38 +0200ubert(~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2021-09-09 10:01:38 +0200ububert
2021-09-09 10:04:13 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-09-09 10:05:30 +0200benin0369323(~benin@183.82.178.253) (Ping timeout: 260 seconds)
2021-09-09 10:06:53 +0200hendursa1(~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 +0200hendursaga(~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 +0200lavaman(~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 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 10:15:11 +0200ishutin_(~ishutin@87-97-12-212.pool.digikabel.hu)
2021-09-09 10:15:22 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 10:15:32 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-09-09 10:17:45 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Killed (NickServ (GHOST command used by allbery_b)))
2021-09-09 10:17:46 +0200allbery_b(~geekosaur@xmonad/geekosaur)
2021-09-09 10:17:49 +0200allbery_bgeekosaur
2021-09-09 10:18:10 +0200ishutin(~ishutin@92-249-150-146.static.digikabel.hu) (Ping timeout: 240 seconds)
2021-09-09 10:19:43 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-09-09 10:19:57 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de)
2021-09-09 10:20:05 +0200polyphem(~polyphem@2a02:810d:640:776c:1bc:e34d:641e:231a) (Ping timeout: 260 seconds)
2021-09-09 10:25:55 +0200xff0x(~xff0x@2001:1a81:52b9:4900:2e17:8c46:ec3d:aff1) (Ping timeout: 260 seconds)
2021-09-09 10:26:12 +0200hegstal(~hegstal@2a02:c7f:7608:d400:8959:ed5e:30f7:362a)
2021-09-09 10:26:20 +0200xff0x(~xff0x@2001:1a81:52b9:4900:be0:d306:f2f7:baf5)
2021-09-09 10:26:51 +0200acidjnk_new(~acidjnk@p5487d0ba.dip0.t-ipconnect.de)
2021-09-09 10:30:25 +0200econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2021-09-09 10:30:49 +0200ubert1(~Thunderbi@91.141.53.92.wireless.dyn.drei.com)
2021-09-09 10:31:02 +0200acidjnk(~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-09-09 10:31:30 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6)
2021-09-09 10:32:31 +0200mcglk(~mcglk@131.191.49.120) (Read error: Connection reset by peer)
2021-09-09 10:34:03 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 10:37:06 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6) (Ping timeout: 260 seconds)
2021-09-09 10:38:02 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-09-09 10:39:12 +0200Vajb(~Vajb@88.195.168.176) (Read error: Connection reset by peer)
2021-09-09 10:40:20 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se) (Remote host closed the connection)
2021-09-09 10:40:40 +0200jonathanx(~jonathan@dyn-8-sc.cdg.chalmers.se)
2021-09-09 10:41:03 +0200Cajun(~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 +0200Vajb(~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 +0200rubin55___(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 +0200rubin55(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 +0200Pickchea(~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 +0200hnOsmium0001(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 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655) (Ping timeout: 265 seconds)
2021-09-09 11:03:16 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi) (Ping timeout: 265 seconds)
2021-09-09 11:03:17 +0200trcc(~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 +0200pretty_dumm_guy(trottel@gateway/vpn/protonvpn/prettydummguy/x-88029655)
2021-09-09 11:04:16 +0200azeem(~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 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2021-09-09 11:06:36 +0200dextaa0(~DV@user/dextaa)
2021-09-09 11:07:20 +0200dextaa(~DV@user/dextaa) (Read error: Connection reset by peer)
2021-09-09 11:07:20 +0200dextaa0dextaa
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 +0200Vajb(~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 +0200Vajb(~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 +0200trcc(~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 +0200ub(~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 +0200ubert1(~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 260 seconds)
2021-09-09 11:20:12 +0200ubert(~Thunderbi@91.141.53.92.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-09-09 11:20:12 +0200ububert
2021-09-09 11:20:12 +0200oxide(~lambda@user/oxide)
2021-09-09 11:22:35 +0200paradajz(~paradajz@2a05:4f46:408:af00:a13:6117:f8f4:effb)
2021-09-09 11:24:59 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-09-09 11:25:27 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 11:25:37 +0200paradajz(~paradajz@2a05:4f46:408:af00:a13:6117:f8f4:effb) (Client Quit)
2021-09-09 11:25:41 +0200amitnjha(~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 +0200peterhil(~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 +0200mei(~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 +0200azeem(~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 +0200azeem(~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 +0200ubert(~Thunderbi@178.165.180.233.wireless.dyn.drei.com) (Ping timeout: 252 seconds)
2021-09-09 11:53:52 +0200luc03(~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1)
2021-09-09 11:53:59 +0200asthasr(~asthasr@162.210.28.151) (Quit: asthasr)
2021-09-09 11:56:12 +0200ubert(~Thunderbi@91.141.39.93.wireless.dyn.drei.com)
2021-09-09 11:57:40 +0200azeem(~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer)
2021-09-09 11:57:54 +0200azeem(~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 +0200ubert(~Thunderbi@91.141.39.93.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-09-09 12:00:50 +0200ub(~Thunderbi@91.141.41.188.wireless.dyn.drei.com)
2021-09-09 12:03:08 +0200ububert
2021-09-09 12:05:56 +0200 <Gurkenglas> (that's what i'm hoping to obtain, predictions :))
2021-09-09 12:06:46 +0200qbt(~edun@user/edun) (Quit: WeeChat 3.2)
2021-09-09 12:07:12 +0200statusfa1ledstatusfailed
2021-09-09 12:11:57 +0200lavaman(~lavaman@98.38.249.169)
2021-09-09 12:15:26 +0200azeem(~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 252 seconds)
2021-09-09 12:15:47 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 12:16:01 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 12:16:10 +0200azeem(~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727)
2021-09-09 12:16:30 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 260 seconds)
2021-09-09 12:19:38 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-09-09 12:19:41 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 12:20:23 +0200azeem(~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer)
2021-09-09 12:21:04 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 12:21:05 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-09-09 12:21:25 +0200azeem(~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 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 260 seconds)
2021-09-09 12:26:07 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 12:26:20 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 12:26:26 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 12:26:48 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 12:27:05 +0200sidbendu(~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 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi) (Ping timeout: 260 seconds)
2021-09-09 12:30:17 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 12:30:49 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 12:32:49 +0200ub(~Thunderbi@91.141.34.0.wireless.dyn.drei.com)
2021-09-09 12:33:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:7d9e:f1ab:9e23:bf6)
2021-09-09 12:34:08 +0200ubert(~Thunderbi@91.141.41.188.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-09-09 12:34:09 +0200ububert
2021-09-09 12:36:42 +0200 <nshepperd2> because that law isn't true?
2021-09-09 12:37:10 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-09-09 12:37:58 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 12:38:26 +0200eggplantade(~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 +0200Pickchea(~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 +0200Phantastes(~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 +0200Phantastes(~Phantaste@c-67-173-229-120.hsd1.co.comcast.net) (Client Quit)
2021-09-09 12:43:29 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 12:44:02 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 12:45:48 +0200sedeki(~textual@user/sedeki)
2021-09-09 12:48:17 +0200sedeki(~textual@user/sedeki) (Client Quit)
2021-09-09 12:48:23 +0200anderson(~ande@134.209.221.71) (Quit: bye)
2021-09-09 12:49:32 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 12:49:47 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 12:51:35 +0200notzmv(~zmv@user/notzmv) (Read error: Connection reset by peer)
2021-09-09 12:52:27 +0200anderson(~ande@134.209.221.71)
2021-09-09 12:54:55 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 12:55:00 +0200notzmv(~zmv@user/notzmv)
2021-09-09 12:55:14 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 12:58:18 +0200azeem(~azeem@emp-182-240.eduroam.uu.se) (Ping timeout: 265 seconds)
2021-09-09 12:59:30 +0200azeem(~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727)
2021-09-09 13:00:25 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 13:01:00 +0200alx741(~alx741@186.178.109.214)
2021-09-09 13:01:04 +0200anderson(~ande@134.209.221.71) (Changing host)
2021-09-09 13:01:04 +0200anderson(~ande@user/anderson)
2021-09-09 13:01:20 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 13:01:58 +0200anderson(~ande@user/anderson) (Quit: bye)
2021-09-09 13:02:42 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2021-09-09 13:02:44 +0200ubert(~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 +0200anderson(~ande@user/anderson)
2021-09-09 13:02:55 +0200ub(~Thunderbi@178.115.42.105.wireless.dyn.drei.com)
2021-09-09 13:02:56 +0200azeem(~azeem@2a00:801:23f:d6b0:3dc9:5843:deaf:1727) (Read error: Connection reset by peer)
2021-09-09 13:03:09 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2021-09-09 13:03:11 +0200azeem(~azeem@emp-182-240.eduroam.uu.se)
2021-09-09 13:05:14 +0200ububert
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 +0200vysn(~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 +0200max22-(~maxime@2a01cb08833598007f934d16e3231d2d.ipv6.abo.wanadoo.fr) (Ping timeout: 260 seconds)
2021-09-09 13:19:55 +0200Pickchea(~private@user/pickchea)
2021-09-09 13:21:52 +0200azeem(~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 +0200azeem(~azeem@emp-182-240.eduroam.uu.se)
2021-09-09 13:25:55 +0200fendor_(~fendor@77.119.194.245.wireless.dyn.drei.com)
2021-09-09 13:26:27 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 13:26:40 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 13:28:45 +0200fendor(~fendor@178.165.191.44.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2021-09-09 13:29:08 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
2021-09-09 13:29:18 +0200MQ-17J(~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f)
2021-09-09 13:29:44 +0200MQ-17J(~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) (Read error: Connection reset by peer)
2021-09-09 13:29:49 +0200fendor_fendor
2021-09-09 13:30:32 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-09 13:32:22 +0200alx741(~alx741@186.178.109.214) (Quit: alx741)
2021-09-09 13:32:53 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 13:34:46 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c)
2021-09-09 13:35:38 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Quit: Client closed)
2021-09-09 13:36:47 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 13:37:08 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 13:38:15 +0200sleblanc(~sleblanc@user/sleblanc)
2021-09-09 13:39:34 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Ping timeout: 260 seconds)
2021-09-09 13:42:42 +0200seeg(~thelounge@static.89.161.217.95.clients.your-server.de) (Quit: The Lounge - https://thelounge.chat)
2021-09-09 13:43:24 +0200seeg(~thelounge@static.89.161.217.95.clients.your-server.de)
2021-09-09 13:43:39 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-09-09 13:47:12 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Quit: = "")
2021-09-09 13:48:34 +0200glguy(x@libera/staff/glguy) (Read error: Connection reset by peer)
2021-09-09 13:52:35 +0200System123(~System123@41.164.183.76)
2021-09-09 13:54:30 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net) (Ping timeout: 260 seconds)
2021-09-09 13:58:42 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 14:03:33 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds)
2021-09-09 14:05:12 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 14:07:08 +0200hololeap(~hololeap@user/hololeap)
2021-09-09 14:11:46 +0200oxide(~lambda@user/oxide) (Ping timeout: 260 seconds)
2021-09-09 14:12:02 +0200machinedgod(~machinedg@135-23-192-217.cpe.pppoe.ca)
2021-09-09 14:12:56 +0200lavaman(~lavaman@98.38.249.169)
2021-09-09 14:14:16 +0200oxide(~lambda@user/oxide)
2021-09-09 14:15:30 +0200cheater(~Username@user/cheater) (Ping timeout: 260 seconds)
2021-09-09 14:16:56 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-09 14:20:47 +0200yaroot(~yaroot@6.3.30.125.dy.iij4u.or.jp) (Quit: The Lounge - https://thelounge.chat)
2021-09-09 14:21:37 +0200yaroot(~yaroot@6.3.30.125.dy.iij4u.or.jp)
2021-09-09 14:22:18 +0200glguy(x@libera/staff/glguy)
2021-09-09 14:25:05 +0200Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2021-09-09 14:25:18 +0200System123(~System123@41.164.183.76) (Ping timeout: 260 seconds)
2021-09-09 14:26:59 +0200Akronymus(~Akronymus@85.118.189.59)
2021-09-09 14:33:22 +0200Lycurgus(~juan@98.4.112.204)
2021-09-09 14:37:09 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 14:37:22 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 14:40:06 +0200tinhatcat(~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 +0200sleblanc(~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 +0200max22-(~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 +0200slowButPresent(~slowButPr@user/slowbutpresent)
2021-09-09 14:51:57 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 14:52:08 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-09 14:54:58 +0200pbrisbin(~patrick@pool-108-16-214-93.phlapa.fios.verizon.net)
2021-09-09 14:57:17 +0200sedeki(~textual@user/sedeki)
2021-09-09 14:57:18 +0200Pickchea(~private@user/pickchea)
2021-09-09 14:57:46 +0200sedeki(~textual@user/sedeki) (Client Quit)
2021-09-09 14:58:24 +0200lortabac(~lortabac@2a01:e0a:541:b8f0:5bfd:35e:da52:7e46) (Quit: WeeChat 2.8)
2021-09-09 14:59:04 +0200max22-(~maxime@2a01cb08833598009553b59d4752b14e.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-09 15:00:42 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection)
2021-09-09 15:03:38 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 15:04:17 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-09 15:04:43 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 252 seconds)
2021-09-09 15:09:03 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 15:09:05 +0200orcus-(~orcus@user/brprice) (Quit: ZNC 1.8.1 - https://znc.in)
2021-09-09 15:09:12 +0200Franciman(~Franciman@openglass.it)
2021-09-09 15:09:24 +0200orcus(~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 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 15:11:20 +0200luc03(~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de)
2021-09-09 15:13:22 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 260 seconds)
2021-09-09 15:13:43 +0200MQ-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 +0200raehik(~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 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net) (Ping timeout: 260 seconds)
2021-09-09 15:18:02 +0200MQ-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 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 252 seconds)
2021-09-09 15:19:10 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-09 15:19:22 +0200hendursa1(~weechat@user/hendursaga) (Quit: hendursa1)
2021-09-09 15:19:33 +0200max22-(~maxime@2a01cb0883359800c86fdddfb8d9c63e.ipv6.abo.wanadoo.fr)
2021-09-09 15:20:55 +0200hendursaga(~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 +0200cheater(~Username@user/cheater)
2021-09-09 15:25:17 +0200aman(~aman@user/aman) (Quit: aman)
2021-09-09 15:32:14 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 15:32:34 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 15:32:55 +0200xff0x(~xff0x@2001:1a81:52b9:4900:be0:d306:f2f7:baf5) (Ping timeout: 252 seconds)
2021-09-09 15:33:40 +0200xff0x(~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533)
2021-09-09 15:36:17 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c)
2021-09-09 15:37:14 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-09-09 15:37:39 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-09-09 15:39:56 +0200MQ-17J(~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f)
2021-09-09 15:39:56 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 15:39:56 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 15:39:56 +0200wroathe(~wroathe@user/wroathe)
2021-09-09 15:40:54 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Ping timeout: 260 seconds)
2021-09-09 15:41:03 +0200jpds(~jpds@gateway/tor-sasl/jpds) (Remote host closed the connection)
2021-09-09 15:41:25 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-09-09 15:42:04 +0200sim590(~simon@modemcable090.207-203-24.mc.videotron.ca)
2021-09-09 15:42:37 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 15:42:50 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 15:42:56 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Client Quit)
2021-09-09 15:43:20 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 15:44:28 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection)
2021-09-09 15:44:55 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp) (Remote host closed the connection)
2021-09-09 15:45:27 +0200aratamizuki(~aratamizu@p2135145-ipoe.ipoe.ocn.ne.jp)
2021-09-09 15:51:27 +0200shriekingnoise(~shrieking@186.137.144.80)
2021-09-09 15:52:06 +0200MQ-17J(~MQ-17J@2607:fb90:46:a8a6:384f:d5fd:c3eb:fa6f) (Read error: Connection reset by peer)
2021-09-09 15:52:10 +0200troydm(~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 +0200MQ-17J(~MQ-17J@35.50.7.10)
2021-09-09 15:52:44 +0200troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2021-09-09 15:55:13 +0200Sgeo(~Sgeo@user/sgeo)
2021-09-09 15:59:52 +0200xff0x(~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) (Ping timeout: 252 seconds)
2021-09-09 16:01:38 +0200peterhil(~peterhil@dsl-hkibng32-54fb52-57.dhcp.inet.fi)
2021-09-09 16:02:47 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2021-09-09 16:03:20 +0200spruit11(~quassel@2a02:a467:ccd6:1:e578:65a3:833a:6855) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2021-09-09 16:05:10 +0200acidjnk_new(~acidjnk@p5487d0ba.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2021-09-09 16:05:26 +0200jippiedoe(~david@2a02-a44c-e14e-1-a863-7c6f-a6d9-ecf2.fixed6.kpn.net)
2021-09-09 16:09:31 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-09-09 16:09:42 +0200mcglk(~mcglk@131.191.49.120)
2021-09-09 16:10:37 +0200xff0x(~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533)
2021-09-09 16:12:03 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 16:12:49 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 16:16:20 +0200slack1256(~slack1256@2607:fb90:25d6:6d7f:a90a:2601:f9dc:3930)
2021-09-09 16:16:21 +0200mangoiv(~MangoIV@193.175.5.172) (Client Quit)
2021-09-09 16:16:29 +0200mangoiv(~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 +0200mangoiv(~MangoIV@193.175.5.172) (Client Quit)
2021-09-09 16:18:26 +0200mangoiv(~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 +0200Pickchea(~private@user/pickchea)
2021-09-09 16:19:51 +0200ec_(~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 +0200arahael(~arahael@203.221.97.63) (Ping timeout: 252 seconds)
2021-09-09 16:24:42 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 16:24:47 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 16:25:04 +0200mangoiv(~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 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-09-09 16:27:06 +0200burnside_(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 16:27:32 +0200myShoggoth(~myShoggot@97-120-70-214.ptld.qwest.net)
2021-09-09 16:28:04 +0200Akronymus(~Akronymus@85.118.189.59) (Quit: Client closed)
2021-09-09 16:28:15 +0200Akronymus(~Akronymus@85.118.189.59)
2021-09-09 16:30:51 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 16:31:00 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 16:31:29 +0200mangoiv(~MangoIV@193.175.5.172) (Client Quit)
2021-09-09 16:31:37 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 16:32:12 +0200waleee(~waleee@2001:9b0:216:8200:d457:9189:7843:1dbd)
2021-09-09 16:32:35 +0200spruit11(~quassel@2a02:a467:ccd6:1:6cc9:33fd:d92c:45c)
2021-09-09 16:36:24 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 16:39:58 +0200tlaxkit(~hexchat@170.253.47.137)
2021-09-09 16:45:02 +0200phma(~phma@host-67-44-208-177.hnremote.net) (Read error: Connection reset by peer)
2021-09-09 16:45:04 +0200burnside_(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection)
2021-09-09 16:45:29 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 252 seconds)
2021-09-09 16:45:51 +0200phma(~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 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 16:51:28 +0200pavonia(~user@user/siracusa)
2021-09-09 16:54:19 +0200Pickchea(~private@user/pickchea) (Ping timeout: 252 seconds)
2021-09-09 16:55:34 +0200xff0x(~xff0x@2001:1a81:52b9:4900:ba34:d2bf:e316:3533) (Ping timeout: 260 seconds)
2021-09-09 16:55:42 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 16:55:50 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 16:56:29 +0200xff0x(~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 +0200mangoiv(~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 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 16:58:15 +0200mangoiv(~MangoIV@193.175.5.172) (Client Quit)
2021-09-09 16:59:13 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 16:59:43 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com)
2021-09-09 17:00:14 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Ping timeout: 260 seconds)
2021-09-09 17:00:46 +0200aman(~aman@user/aman)
2021-09-09 17:09:35 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 17:09:49 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 17:09:51 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-09 17:10:12 +0200vysn(~vysn@user/vysn)
2021-09-09 17:10:30 +0200kstuart(~kstuart@85.203.34.2)
2021-09-09 17:11:23 +0200mangoiv(~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 +0200Andrew(~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 +0200AndrewYu(~andrew@user/andrewyu)
2021-09-09 17:16:08 +0200Akronymus(~Akronymus@85.118.189.59) (Quit: Client closed)
2021-09-09 17:17:15 +0200Akronymus(~Akronymus@85.118.189.59)
2021-09-09 17:18:00 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 17:18:14 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 17:18:38 +0200zmt00(~zmt00@user/zmt00)
2021-09-09 17:19:30 +0200burnside_(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 17:19:30 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Read error: Connection reset by peer)
2021-09-09 17:20:28 +0200Akronymus(~Akronymus@85.118.189.59) (Client Quit)
2021-09-09 17:22:33 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c)
2021-09-09 17:23:26 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 17:23:46 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 17:24:43 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be)
2021-09-09 17:24:47 +0200Pickchea(~private@user/pickchea)
2021-09-09 17:26:27 +0200ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2021-09-09 17:26:52 +0200ChaiTRex(~ChaiTRex@user/chaitrex)
2021-09-09 17:30:38 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 17:30:47 +0200mc47(~mc47@xmonad/TheMC47) (Remote host closed the connection)
2021-09-09 17:30:54 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 17:31:52 +0200jippiedoe(~david@2a02-a44c-e14e-1-a863-7c6f-a6d9-ecf2.fixed6.kpn.net) (Quit: Leaving)
2021-09-09 17:33:51 +0200brandonh(brandonh@gateway/vpn/protonvpn/brandonh)
2021-09-09 17:37:18 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 17:39:36 +0200favonia(~favonia@user/favonia) (Ping timeout: 265 seconds)
2021-09-09 17:40:44 +0200chele(~chele@user/chele) (Remote host closed the connection)
2021-09-09 17:40:52 +0200enoq(~enoq@2a05:1141:1f5:5600:b9c9:721a:599:bfe7)
2021-09-09 17:41:32 +0200Pickchea(~private@user/pickchea) (Ping timeout: 265 seconds)
2021-09-09 17:42:48 +0200System123(~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946)
2021-09-09 17:43:00 +0200System123(~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 +0200System123(~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946)
2021-09-09 17:46:12 +0200vysn(~vysn@user/vysn) (Quit: WeeChat 3.2)
2021-09-09 17:47:52 +0200Vajb(~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi)
2021-09-09 17:49:53 +0200Vajb(~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-09 17:50:31 +0200Vajb(~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 +0200MQ-17J(~MQ-17J@35.50.7.10) (Ping timeout: 260 seconds)
2021-09-09 17:53:53 +0200neo1(~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 +0200amahl(~amahl@dsl-jklbng12-54fbca-64.dhcp.inet.fi)
2021-09-09 17:58:04 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection)
2021-09-09 18:01:11 +0200burnside_(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Remote host closed the connection)
2021-09-09 18:01:28 +0200MQ-17J(~MQ-17J@2607:fb90:1d3a:e28c:515f:1bae:68b2:8409)
2021-09-09 18:01:50 +0200Lycurgus(~juan@98.4.112.204) (Ping timeout: 260 seconds)
2021-09-09 18:01:53 +0200cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.2)
2021-09-09 18:01:58 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c)
2021-09-09 18:02:24 +0200shapr(~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 +0200hexfive(~eric@50.35.83.177)
2021-09-09 18:02:48 +0200hexfive(~eric@50.35.83.177) (Client Quit)
2021-09-09 18:04:47 +0200System123(~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Remote host closed the connection)
2021-09-09 18:06:31 +0200luc03(~a@p200300ef97083056400e9f76999ee7ea.dip0.t-ipconnect.de) (Quit: WeeChat 3.0.1)
2021-09-09 18:07:51 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 18:08:08 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2021-09-09 18:08:34 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-09 18:09:54 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-09 18:10:41 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 18:10:44 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-09 18:11:56 +0200vysn(~vysn@user/vysn)
2021-09-09 18:12:32 +0200azeem(~azeem@emp-182-240.eduroam.uu.se) (Read error: Connection reset by peer)
2021-09-09 18:13:12 +0200azeem(~azeem@2a00:801:23e:e471:2966:ade4:f65d:e1fd)
2021-09-09 18:13:49 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 18:14:06 +0200amitnjha(~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 +0200gentauroreference: 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 +0200arahael(~arahael@203.221.121.242)
2021-09-09 18:19:07 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 18:19:08 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 18:19:08 +0200wroathe(~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 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 265 seconds)
2021-09-09 18:22:13 +0200martin02(~silas@141.84.69.76) (Ping timeout: 252 seconds)
2021-09-09 18:23:37 +0200martin02(~silas@141.84.69.76)
2021-09-09 18:24:39 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 18:27:59 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection)
2021-09-09 18:28:10 +0200slack1256(~slack1256@2607:fb90:25d6:6d7f:a90a:2601:f9dc:3930) (Remote host closed the connection)
2021-09-09 18:28:15 +0200cafkafk(~cafkafk@user/cafkafk)
2021-09-09 18:28:46 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 18:29:18 +0200favonia(~favonia@user/favonia)
2021-09-09 18:29:48 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c)
2021-09-09 18:30:03 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 18:31:29 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 18:31:32 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net)
2021-09-09 18:31:50 +0200shapr(~user@c-69-138-21-57.hsd1.va.comcast.net) (Ping timeout: 260 seconds)
2021-09-09 18:32:54 +0200glguy_(x@libera/staff/glguy)
2021-09-09 18:34:15 +0200glguy(x@libera/staff/glguy) (Read error: Connection reset by peer)
2021-09-09 18:34:39 +0200proofofkeags(~proofofke@205.209.28.54)
2021-09-09 18:34:54 +0200shapr(~user@c-69-138-21-57.hsd1.dc.comcast.net)
2021-09-09 18:35:00 +0200Erutuon(~Erutuon@user/erutuon)
2021-09-09 18:36:15 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 18:37:35 +0200Vajb(~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 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 260 seconds)
2021-09-09 18:39:07 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk)
2021-09-09 18:41:59 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi) (Read error: Connection reset by peer)
2021-09-09 18:42:38 +0200Vajb(~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi)
2021-09-09 18:43:53 +0200burnsidesLlama(~burnsides@dhcp168-018.wadham.ox.ac.uk) (Ping timeout: 265 seconds)
2021-09-09 18:44:42 +0200MQ-17J(~MQ-17J@2607:fb90:1d3a:e28c:515f:1bae:68b2:8409) (Read error: Connection reset by peer)
2021-09-09 18:44:59 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 18:48:29 +0200aman(~aman@user/aman) (Quit: aman)
2021-09-09 18:49:12 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 18:49:25 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 18:51:41 +0200hegstal(~hegstal@2a02:c7f:7608:d400:8959:ed5e:30f7:362a) (Remote host closed the connection)
2021-09-09 18:52:06 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds)
2021-09-09 18:53:04 +0200glguy_glguy
2021-09-09 18:54:50 +0200aman(~aman@user/aman)
2021-09-09 18:56:30 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 18:56:35 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 18:57:11 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com) (Ping timeout: 256 seconds)
2021-09-09 18:59:53 +0200hrnz(~ulli@vegan.im.it) (Quit: das ist mir zu bld hier; bb)
2021-09-09 19:00:37 +0200hrnz(~ulli@vegan.im.it)
2021-09-09 19:01:19 +0200hrnz(~ulli@vegan.im.it) (Client Quit)
2021-09-09 19:01:47 +0200hrnz(~ulli@vegan.im.it)
2021-09-09 19:03:28 +0200 <maerwald> SPJ working on stack?
2021-09-09 19:03:32 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 19:04:03 +0200zebrag(~chris@user/zebrag)
2021-09-09 19:08:07 +0200Vajb(~Vajb@n1xq4ni1adi29tefj-2.v6.elisa-mobile.fi) (Read error: Connection reset by peer)
2021-09-09 19:08:48 +0200Vajb(~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 +0200hnOsmium0001(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 +0200Pickchea(~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 +0200lavaman(~lavaman@98.38.249.169)
2021-09-09 19:16:54 +0200econo(uid147250@user/econo)
2021-09-09 19:17:50 +0200tureba(~tureba@tureba.org) (Ping timeout: 252 seconds)
2021-09-09 19:18:17 +0200nshepperd2(~nshepperd@li364-218.members.linode.com) (Quit: Ping timeout (120 seconds))
2021-09-09 19:18:27 +0200nshepperd2(~nshepperd@li364-218.members.linode.com)
2021-09-09 19:18:28 +0200abraham(~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 +0200lavaman(~lavaman@98.38.249.169) (Ping timeout: 265 seconds)
2021-09-09 19:21:40 +0200shapr(~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 +0200Pickchea(~private@user/pickchea) (Ping timeout: 260 seconds)
2021-09-09 19:25:56 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2021-09-09 19:28:26 +0200jangid(~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 +0200Vajb(~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 +0200eggplantade(~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 +0200justsomeguy(~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 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 19:44:15 +0200Vajb(~Vajb@hag-jnsbng11-58c3a8-176.dhcp.inet.fi)
2021-09-09 19:49:05 +0200dhouthoo(~dhouthoo@178-117-36-167.access.telenet.be) (Quit: WeeChat 3.2)
2021-09-09 19:49:37 +0200favonia(~favonia@user/favonia) (Ping timeout: 252 seconds)
2021-09-09 19:49:44 +0200ec_(~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 +0200eggplantade(~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 +0200merijn(~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 +0200kuribas(~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 +0200kayprish(~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 +0200chisui(~chisui@200116b868aa4700d8770583f0c423d2.dip.versatel-1u1.de)
2021-09-09 20:00:22 +0200brandonh(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 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 20:04:45 +0200amitnjha(~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 +0200beka(~beka@104.193.170.240)
2021-09-09 20:05:32 +0200abraham(~abraham@191.96.120.55) (Quit: Textual IRC Client: www.textualapp.com)
2021-09-09 20:05:36 +0200System123(~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 +0200enoq(~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 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 20:08:45 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 20:08:54 +0200favonia(~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 +0200abhixec(~abhixec@c-67-169-139-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
2021-09-09 20:10:10 +0200System123(~System123@2c0f:f4c0:2202:6b94:9580:2b3e:eee5:e946) (Ping timeout: 260 seconds)
2021-09-09 20:10:20 +0200mangoiv(~MangoIV@193.175.5.172) (Client Quit)
2021-09-09 20:10:32 +0200mangoiv(~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 +0200brandonh(brandonh@gateway/vpn/protonvpn/brandonh)
2021-09-09 20:21:00 +0200ec_(~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 +0200justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 260 seconds)
2021-09-09 20:26:19 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 20:26:19 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 20:26:19 +0200wroathe(~wroathe@user/wroathe)
2021-09-09 20:27:50 +0200ec_(~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 +0200lavaman(~lavaman@98.38.249.169)
2021-09-09 20:29:46 +0200merijn(~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 +0200hnOsmium0001(uid453710@id-453710.stonehaven.irccloud.com)
2021-09-09 20:31:16 +0200asivitz(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 +0200justsomeguy(~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 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Ping timeout: 250 seconds)
2021-09-09 20:35:59 +0200jangid(~user@2405:201:5c06:70a7:747e:edf:1970:bbdb) (Quit: day over)
2021-09-09 20:37:53 +0200roboguy_(~roboguy_@cpe-98-156-4-161.kc.res.rr.com)
2021-09-09 20:38:01 +0200vicfred(~vicfred@user/vicfred)
2021-09-09 20:39:25 +0200dyeplexer(~dyeplexer@user/dyeplexer) (Remote host closed the connection)
2021-09-09 20:41:20 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2021-09-09 20:41:25 +0200ephemient(uid407513@id-407513.lymington.irccloud.com)
2021-09-09 20:42:20 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection)
2021-09-09 20:44:58 +0200lavaman(~lavaman@98.38.249.169) (Remote host closed the connection)
2021-09-09 20:47:06 +0200kstuart(~kstuart@85.203.34.2) (Remote host closed the connection)
2021-09-09 20:47:29 +0200alx741(~alx741@186.178.109.214)
2021-09-09 20:49:22 +0200dschrempf(~dominik@070-207.dynamic.dsl.fonira.net)
2021-09-09 20:49:24 +0200mmohammadi9812(~Mohammad@ip232.ip-51-222-214.net)
2021-09-09 20:56:22 +0200abraham(~abraham@143.244.185.86)
2021-09-09 20:57:11 +0200max22-(~maxime@2a01cb0883359800c86fdddfb8d9c63e.ipv6.abo.wanadoo.fr) (Quit: Leaving)
2021-09-09 20:59:24 +0200geekosaur(~geekosaur@xmonad/geekosaur) (Remote host closed the connection)
2021-09-09 21:00:02 +0200thyriaen(~thyriaen@x4db77b69.dyn.telefonica.de)
2021-09-09 21:01:14 +0200alx741(~alx741@186.178.109.214) (Quit: alx741)
2021-09-09 21:01:40 +0200geekosaur(~geekosaur@xmonad/geekosaur)
2021-09-09 21:03:56 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl)
2021-09-09 21:05:45 +0200aman(~aman@user/aman) (Quit: aman)
2021-09-09 21:07:09 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 21:08:53 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 265 seconds)
2021-09-09 21:11:26 +0200mmohammadi9812(~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 +0200mmohammadi9812(~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 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c)
2021-09-09 21:13:11 +0200System123(~System123@165-73-115-78.ip.afrihost.capetown)
2021-09-09 21:13:20 +0200brandonh(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 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 21:14:21 +0200phma(~phma@host-67-44-209-67.hnremote.net) (Read error: Connection reset by peer)
2021-09-09 21:15:12 +0200phma(~phma@host-67-44-208-90.hnremote.net)
2021-09-09 21:15:25 +0200max22-(~maxime@2a01cb08833598004190beef1e8cf3bf.ipv6.abo.wanadoo.fr)
2021-09-09 21:19:58 +0200abhixec(~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 +0200Guest|41(~Guest|41@129.104.98.71)
2021-09-09 21:26:30 +0200Axma21295(~Axman6@user/axman6)
2021-09-09 21:28:07 +0200Axman6(~Axman6@user/axman6) (Ping timeout: 260 seconds)
2021-09-09 21:28:19 +0200System12_(~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 +0200System123(~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 +0200tfeb(~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 +0200drguildo(~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 +0200neo1(~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 +0200neo1(~neo3@cpe-292712.ip.primehome.com)
2021-09-09 21:38:35 +0200oxide(~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 +0200drguildo(~sjm@user/drguildo) ()
2021-09-09 21:40:22 +0200 <maerwald> my standard answer to support requests
2021-09-09 21:40:50 +0200abhixec(~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 +0200abhixec(~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 +0200mniip(mniip@libera/staff/mniip) (Ping timeout: 600 seconds)
2021-09-09 21:43:58 +0200mei(~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 +0200mniip(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 +0200abhixec(~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 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Remote host closed the connection)
2021-09-09 21:50:43 +0200MQ-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 +0200tfeb(~tfb@host86-128-238-44.range86-128.btcentralplus.com) (Quit: died)
2021-09-09 21:53:18 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 21:54:02 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.2)
2021-09-09 21:54:51 +0200kayprish(~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 +0200dschrempf(~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 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 22:01:23 +0200acidjnk_new(~acidjnk@p200300d0c7203080b5211f3083e4cecd.dip0.t-ipconnect.de)
2021-09-09 22:04:06 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-09-09 22:04:29 +0200mikoto-chan(~mikoto-ch@ip-83-134-2-136.dsl.scarlet.be) (Ping timeout: 252 seconds)
2021-09-09 22:05:04 +0200juhp(~juhp@128.106.188.220) (Ping timeout: 252 seconds)
2021-09-09 22:06:30 +0200mikoto-chan(~mikoto-ch@83.137.2.242)
2021-09-09 22:06:34 +0200sneedsfeed(~sneedsfee@rrcs-173-95-122-169.midsouth.biz.rr.com)
2021-09-09 22:06:43 +0200juhp(~juhp@128.106.188.220)
2021-09-09 22:07:32 +0200eggplantade(~Eggplanta@2600:1700:bef1:5e10:c1f1:b01b:5ae7:397c) (Remote host closed the connection)
2021-09-09 22:12:07 +0200acidjnk(~acidjnk@p200300d0c7203080c0b3f2662aa27c56.dip0.t-ipconnect.de)
2021-09-09 22:12:12 +0200mniip(mniip@libera/staff/mniip) (Ping timeout: 619 seconds)
2021-09-09 22:14:15 +0200mniip(mniip@libera/staff/mniip)
2021-09-09 22:14:52 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 22:15:11 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 22:15:31 +0200acidjnk_new(~acidjnk@p200300d0c7203080b5211f3083e4cecd.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-09-09 22:16:34 +0200unit73e(~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 +0200Pickchea(~private@user/pickchea)
2021-09-09 22:19:24 +0200unit73e(~emanuel@2001:818:e8dd:7c00:32b5:c2ff:fe6b:5291)
2021-09-09 22:19:54 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 260 seconds)
2021-09-09 22:21:49 +0200raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2021-09-09 22:21:51 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-09-09 22:22:05 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de)
2021-09-09 22:22:58 +0200tlaxkit(~hexchat@170.253.47.137) (Remote host closed the connection)
2021-09-09 22:23:12 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 22:23:22 +0200tlaxkit(~hexchat@170.253.47.137)
2021-09-09 22:24:37 +0200tlaxkit(~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 +0200fendor(~fendor@77.119.194.245.wireless.dyn.drei.com) (Remote host closed the connection)
2021-09-09 22:27:52 +0200System12_(~System123@ec2-52-61-197-79.us-gov-west-1.compute.amazonaws.com) (Quit: Leaving...)
2021-09-09 22:27:55 +0200sm2n(~sm2n@user/sm2n)
2021-09-09 22:28:50 +0200fendor(~fendor@77.119.194.245.wireless.dyn.drei.com)
2021-09-09 22:29:01 +0200brandonh(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 +0200ec_(~ec@gateway/tor-sasl/ec)
2021-09-09 22:31:09 +0200 <_bin> maerwald: Huh?
2021-09-09 22:31:24 +0200haykam1(~haykam@static.100.2.21.65.clients.your-server.de) (Remote host closed the connection)
2021-09-09 22:31:37 +0200haykam1(~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 +0200d34df00d(~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 +0200shapr(~user@pool-100-36-247-68.washdc.fios.verizon.net)
2021-09-09 22:33:23 +0200eggplantade(~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 +0200Guest|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 +0200brandonh(brandonh@gateway/vpn/protonvpn/brandonh) (Ping timeout: 252 seconds)
2021-09-09 22:42:43 +0200brandonh(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 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 22:47:44 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 22:49:25 +0200nicbk(~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 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 22:55:25 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 22:55:43 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Client Quit)
2021-09-09 22:55:57 +0200amitnjha(~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 +0200Lord_of_Life_(~Lord@user/lord-of-life/x-2819915)
2021-09-09 22:58:07 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 265 seconds)
2021-09-09 22:58:23 +0200favonia(~favonia@user/favonia) (Ping timeout: 252 seconds)
2021-09-09 22:59:31 +0200Lord_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 +0200merijn(~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 +0200ec_(~ec@gateway/tor-sasl/ec) (Ping timeout: 276 seconds)
2021-09-09 23:08:09 +0200acidjnk_new(~acidjnk@p5487d0ba.dip0.t-ipconnect.de)
2021-09-09 23:08:31 +0200brandonh(brandonh@gateway/vpn/protonvpn/brandonh) (Quit: brandonh)
2021-09-09 23:08:50 +0200mikoto-chan(~mikoto-ch@83.137.2.242) (Ping timeout: 252 seconds)
2021-09-09 23:10:53 +0200mikoto-chan(~mikoto-ch@83.137.2.241)
2021-09-09 23:11:37 +0200acidjnk(~acidjnk@p200300d0c7203080c0b3f2662aa27c56.dip0.t-ipconnect.de) (Ping timeout: 252 seconds)
2021-09-09 23:12:35 +0200mikoto-chan(~mikoto-ch@83.137.2.241) (Client Quit)
2021-09-09 23:13:17 +0200neo2(~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 +0200ec_(~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 +0200shriekingnoise_(~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 +0200thyriaen(~thyriaen@x4db77b69.dyn.telefonica.de) (Quit: Leaving)
2021-09-09 23:15:49 +0200mikoto-c1(~mikoto-ch@83.137.2.241)
2021-09-09 23:15:49 +0200proofofkeags_(~proofofke@205.209.28.54)
2021-09-09 23:15:49 +0200yaroot9(~yaroot@125.30.3.6)
2021-09-09 23:15:49 +0200proofofkeags(~proofofke@205.209.28.54) (Read error: Connection reset by peer)
2021-09-09 23:15:49 +0200shriekingnoise(~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 +0200neo1(~neo3@cpe-292712.ip.primehome.com) (Ping timeout: 260 seconds)
2021-09-09 23:16:22 +0200cheater(~Username@user/cheater) (Ping timeout: 260 seconds)
2021-09-09 23:16:22 +0200yaroot(~yaroot@6.3.30.125.dy.iij4u.or.jp) (Ping timeout: 260 seconds)
2021-09-09 23:16:22 +0200yaroot9yaroot
2021-09-09 23:16:42 +0200cheater(~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 +0200favonia(~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 +0200ubert(~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 +0200ubert(~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 +0200jpds(~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 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com) (Quit: amitnjha)
2021-09-09 23:26:18 +0200amitnjha(~amit@024-216-124-116.res.spectrum.com)
2021-09-09 23:26:38 +0200ubert(~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 +0200jpds(~jpds@gateway/tor-sasl/jpds)
2021-09-09 23:28:06 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com) (Ping timeout: 265 seconds)
2021-09-09 23:28:11 +0200chisui(~chisui@200116b868aa4700d8770583f0c423d2.dip.versatel-1u1.de) (Quit: Client closed)
2021-09-09 23:28:14 +0200jess(~jess@libera/staff/jess)
2021-09-09 23:28:21 +0200takuan(~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 +0200wonko(~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 +0200merijn(~merijn@83-160-49-249.ip.xs4all.nl) (Ping timeout: 252 seconds)
2021-09-09 23:39:47 +0200michalz(~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 +0200sneedsfeed(~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 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net)
2021-09-09 23:44:49 +0200wroathe(~wroathe@c-68-54-25-135.hsd1.mn.comcast.net) (Changing host)
2021-09-09 23:44:49 +0200wroathe(~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 +0200MQ-17J(~MQ-17J@d14-69-206-129.try.wideopenwest.com)
2021-09-09 23:49:08 +0200mangoiv(~MangoIV@193.175.5.172) (Quit: WeeChat 3.2)
2021-09-09 23:49:19 +0200mangoiv(~MangoIV@193.175.5.172)
2021-09-09 23:50:24 +0200gehmehgeh(~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 +0200ec_(~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 +0200fendor(~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 +0200chisui(~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 +0200MQ-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 +0200ec_(~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 +0200Pickchea(~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 +0200hololeap(~hololeap@user/hololeap) (Ping timeout: 276 seconds)
2021-09-09 23:59:48 +0200hololeap(~hololeap@user/hololeap)