2023/07/15

2023-07-15 00:00:19 +0200 <ski> so, if you see `mystery :: Int -> [a] -> [a]' in a library, you *know* that its behaviour can't depend on the actual type you use for `a', nor can it depend on the actual values of that type that you pass in the list. and the only way for it to get `a' values is from that list, so all elements in the result list must come from the argument list
2023-07-15 00:01:31 +0200 <ski> if you see `someHOF :: (a -> Maybe a) -> (a -> a -> Bool) -> [a] -> [a]', you know that the only way the function can inspect the list elements, is *via* those two callback functions (which it can only call on elements of the input list)
2023-07-15 00:01:43 +0200califax(~califax@user/califx) (Remote host closed the connection)
2023-07-15 00:02:06 +0200califax(~califax@user/califx)
2023-07-15 00:03:39 +0200hpc(~juzz@ip98-169-35-163.dc.dc.cox.net) (Ping timeout: 246 seconds)
2023-07-15 00:04:32 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 00:04:54 +0200gmg(~user@user/gehmehgeh) (Quit: Leaving)
2023-07-15 00:05:00 +0200 <ski> if you want to be able to do something, depending on the type, you must explicitly opt-in to that, by adding a `Typeable' constraint, like `foo :: Typeable a => [a] -> [a]' can check what type `a' the caller picked, and if it knows that type, it can look inside the input elements, and can also construct unrelated output elements
2023-07-15 00:05:21 +0200 <segfaultfizzbuzz> wow this seems very important,... but i am doing a double take, if the function is "generic" in my neanderthalic vocabulary, then it does not work with the values of that generic parameter? the function signature must specialize in order to introspect?
2023-07-15 00:05:32 +0200hpc(~juzz@ip98-169-35-163.dc.dc.cox.net)
2023-07-15 00:06:04 +0200 <segfaultfizzbuzz> that fact makes haskell code a lot more readable, ha
2023-07-15 00:06:33 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 00:07:26 +0200titibandit(~titibandi@user/titibandit) (Remote host closed the connection)
2023-07-15 00:08:00 +0200 <ski> it can "handle" the values, by passing them around. but it can't look inside them, nor conjure up new values of that type from scratch (barring a few special cases like `error :: String -> a',`(let x = x in x) :: a')
2023-07-15 00:08:14 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Remote host closed the connection)
2023-07-15 00:08:26 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 00:08:33 +0200 <segfaultfizzbuzz> right, introspect, that's like totally awesome
2023-07-15 00:09:28 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Read error: Connection reset by peer)
2023-07-15 00:09:50 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2023-07-15 00:10:26 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Remote host closed the connection)
2023-07-15 00:10:58 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 00:11:00 +0200 <ski> anyway, as you can imagine, this property, "parametricity", can be quite handy, at times, when trying to figure out what some random library function *can't* do, in order to better understand code, or in order to be able to refactor it without changing observable behaviour (e.g. changing `map f (mystery n (map g xs))' to `map f (map g (mystery n xs))' so that you can further refactor it to `map (f . g)
2023-07-15 00:11:04 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au)
2023-07-15 00:11:06 +0200 <ski> (mystery n xs)' merging two traversals into a single one)
2023-07-15 00:11:21 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 246 seconds)
2023-07-15 00:11:31 +0200 <segfaultfizzbuzz> yeah i love it, totally changes the readability
2023-07-15 00:11:44 +0200 <ski> not every language which has generics / parametric polymorphism has this "parametricity" property. e.g. Java doesn't, because there is `instanceof' and downcasts
2023-07-15 00:14:30 +0200 <ski> parametricity tends to help better understanding the possible behaviour of (polymorphic) higher-order functions (like `someHOF' above), in that you know that the *only* `a' values it passes to the callbacks (apart from the special exceptions for "bottom" elements (aborting computation, infinite loop) that i mentioned) comes in some way from the inputs you pass to the HOF (the input list, here), and also that
2023-07-15 00:14:36 +0200 <ski> that's the *only* way the HOF has of inspecting (and possibly producing more) of those `a' values
2023-07-15 00:15:07 +0200 <ski> @free mystery :: Int -> [a] -> [a]
2023-07-15 00:15:07 +0200 <lambdabot> $map f . mystery x = mystery x . $map f
2023-07-15 00:15:19 +0200bilegeek(~bilegeek@2600:1008:b05a:b7e5:c4f0:94df:26fd:4b15)
2023-07-15 00:15:54 +0200 <ski> that law (which we can claim, solely by knowing the *type* of `mystery') is what i used above, to refactor `mystery n (map g xs)' to `map g (mystery n xs)'
2023-07-15 00:15:58 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 00:16:30 +0200 <ski> (there's a paper, by wadler, about "free theorems", which is about this)
2023-07-15 00:16:36 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au) (Ping timeout: 272 seconds)
2023-07-15 00:18:23 +0200 <ski> "Theorems for free!" by Philip Wadler in 1989-09 at <https://homepages.inf.ed.ac.uk/wadler/topics/parametricity.html#free>
2023-07-15 00:18:27 +0200 <segfaultfizzbuzz> i don't know $map
2023-07-15 00:18:36 +0200 <hpc> it's just @free's way of saying map
2023-07-15 00:18:44 +0200 <hpc> @free map :: x -> y -> z
2023-07-15 00:18:45 +0200 <lambdabot> h . map x = map (f x) . g
2023-07-15 00:18:54 +0200 <hpc> so you don't get confused if you do ^ that
2023-07-15 00:18:54 +0200 <int-e> the natural fmap
2023-07-15 00:18:57 +0200 <ski> that's just the notation used by that `free' command, to distinguish from any random function that might be named `map'
2023-07-15 00:19:10 +0200 <ski> @free map :: Int -> [a] -> [a]
2023-07-15 00:19:10 +0200 <lambdabot> $map f . map x = map x . $map f
2023-07-15 00:19:30 +0200 <ski> @free catMaybes :: [Maybe a] -> [a]
2023-07-15 00:19:30 +0200 <lambdabot> $map f . catMaybes = catMaybes . $map ($map_Maybe f)
2023-07-15 00:19:46 +0200acidjnk(~acidjnk@p200300d6e7072f846d698869e9f24b6e.dip0.t-ipconnect.de) (Ping timeout: 272 seconds)
2023-07-15 00:20:02 +0200 <ski> `$map' is for `[]' (lists), `$map_F' is for general type constructors (like `Maybe')
2023-07-15 00:20:32 +0200 <ski> @free swap :: (a,b) -> (b,a)
2023-07-15 00:20:32 +0200 <lambdabot> $map_Pair g f . swap = swap . $map_Pair f g
2023-07-15 00:22:03 +0200 <ski> that's assuming a (bifunctor) `bimap :: (a0 -> a1) -> (b0 -> b1) -> ((a0,b0) -> (a1,b1))' (which it called `$map_Pair' above) (or `bimap :: Bifunctor t => (a0 -> a1) -> (b0 -> b1) -> (t a0 b0 -> t a1 b1)' in general)
2023-07-15 00:22:23 +0200 <ski> @free mirror :: Either a b -> Either b a
2023-07-15 00:22:23 +0200 <lambdabot> $map_Either g f . mirror = mirror . $map_Either f g
2023-07-15 00:22:34 +0200 <ski> @free length :: [a] -> Int
2023-07-15 00:22:35 +0200 <lambdabot> length = length . $map f
2023-07-15 00:25:33 +0200 <segfaultfizzbuzz> @free 1 + 1
2023-07-15 00:25:33 +0200 <lambdabot> Try `free <ident>` or `free <ident> :: <type>`
2023-07-15 00:25:38 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 00:25:38 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 00:25:38 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 00:25:52 +0200 <segfaultfizzbuzz> ok so free is computing something on the command you are providing it?
2023-07-15 00:26:48 +0200 <segfaultfizzbuzz> i don't think i have ever typed something like what you have provided into ghci and gotten a response like what @free is providing, looks like you are saying "show me the type of this" or some similar thing...?
2023-07-15 00:27:16 +0200 <ski> it's computing the law, from the shape of the type signature of the polymorphim operation you're suggesting to it (it doesn't look up in any library whether there's actually an operation of that type)
2023-07-15 00:27:26 +0200ub(~Thunderbi@178.165.175.35.wireless.dyn.drei.com)
2023-07-15 00:28:01 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 00:28:03 +0200 <ski> `free' is a lambdabot plugin. iirc, it may be possibly to use from the interactor, though. (istr you can use lambdabot from the interactor. never tried, though)
2023-07-15 00:28:36 +0200 <geekosaur> I think goa's bitrotted
2023-07-15 00:28:44 +0200 <geekosaur> @hackage goa
2023-07-15 00:28:44 +0200 <lambdabot> https://hackage.haskell.org/package/goa
2023-07-15 00:29:27 +0200buckwheat(~buckwheat@209.122.211.192)
2023-07-15 00:29:38 +0200 <segfaultfizzbuzz> "the law" is new to me
2023-07-15 00:29:49 +0200segfaultfizzbuzzmakes a gangsta symbol and pulls pants down to ankles
2023-07-15 00:30:52 +0200fweht(uid404746@id-404746.lymington.irccloud.com)
2023-07-15 00:30:58 +0200thegeekinside(~thegeekin@189.217.90.138) (Read error: Connection reset by peer)
2023-07-15 00:31:04 +0200 <ski> "it's computing the law" -- the "free law" (in the sense that you get it "for free", from just knowing the type of the operation, thanks to the parametricity property of Haskell's generics / parametric polymorphism)
2023-07-15 00:31:19 +0200 <ski> a few other papers which might be interesting to check out :
2023-07-15 00:31:24 +0200 <ski> @where polymorphic-type-inference
2023-07-15 00:31:25 +0200 <lambdabot> "Polymorphic Type Inference" by Michael I. Schwartzbach in 1995-03 at <https://cs.au.dk/~mis/typeinf.p(s|df)>,<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.1493>
2023-07-15 00:31:28 +0200 <ski> @where on-understanding
2023-07-15 00:31:28 +0200 <lambdabot> "On Understanding Types, Data Abstraction, and Polymorphism" by Luca Cardelli,Peter Wegner in 1985-12 at <http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf>
2023-07-15 00:31:31 +0200 <ski> @where on-understanding-revisited
2023-07-15 00:31:31 +0200 <lambdabot> "On Understanding Data Abstraction, Revisited" by William R. Cook in 2009-10 at <http://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf>
2023-07-15 00:31:40 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au)
2023-07-15 00:32:26 +0200 <segfaultfizzbuzz> tbh when i look at papers i am lucky to understand anything more than a couple of paragraphs
2023-07-15 00:32:34 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 00:33:05 +0200 <segfaultfizzbuzz> quite often i hit something like those type inference diagrams and i get buffer overflow from the definitions
2023-07-15 00:33:20 +0200 <ski> some authors are better at writing accessibly, than others
2023-07-15 00:33:27 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 00:33:30 +0200 <ski> Wadler's usually pretty great
2023-07-15 00:34:16 +0200 <ski> also, i'd suggest the Schwartzbach paper above as an intro to type systems and polymorphism. it explains quite a bit explicitly that most other papers on type systems takes for granted
2023-07-15 00:35:30 +0200nyc(~nyc@user/nyc) (Ping timeout: 246 seconds)
2023-07-15 00:35:41 +0200 <segfaultfizzbuzz> i have a simpler question which might be better and on point (??): i came across ben lynn's excellent macguyver talk, i think i understood and retained more than half of it, and it got me wondering whether there is such thing as a typed combinator?
2023-07-15 00:36:07 +0200 <ski> hm, i'm not familiar with that talk (link ?)
2023-07-15 00:36:16 +0200 <segfaultfizzbuzz> https://www.youtube.com/watch?v=3kMvXXGXaws&list=PLOvRW_utVPVmzDGGOJ2amgVBK168Vemke&index=7
2023-07-15 00:36:20 +0200 <ski> what is meant by "combinator", in this context ?
2023-07-15 00:37:01 +0200 <segfaultfizzbuzz> you can skip to ten minutes into the video to cut to the most important part i think,... basically he says S &K combinators taken together are turing complete
2023-07-15 00:38:10 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 00:38:24 +0200 <ski> oh, combinatory logic
2023-07-15 00:38:52 +0200 <ski> sure, you can type those combinators, like
2023-07-15 00:39:13 +0200 <ski> S : (a -> b -> c) -> (a -> b) -> (a -> c)
2023-07-15 00:39:21 +0200 <ski> K : a -> b -> a
2023-07-15 00:39:27 +0200 <ski> I : a -> a
2023-07-15 00:40:40 +0200 <ski> also other combinators, like
2023-07-15 00:40:51 +0200 <segfaultfizzbuzz> ...are the results of reduction of SK evaluation order dependent? no right?
2023-07-15 00:40:57 +0200 <ski> B : (b -> c) -> (a -> b) -> (a -> c)
2023-07-15 00:40:59 +0200dcoutts(~duncan@212.187.244.53)
2023-07-15 00:41:22 +0200 <ski> C : (a -> b -> c) -> (b -> a -> c)
2023-07-15 00:41:32 +0200 <ski> W : (a -> a -> b) -> (a -> b)
2023-07-15 00:44:05 +0200 <ski> segfaultfizzbuzz : depends on whether you have types or not (simplifying slightly). with no types, you can easily make an infinite loop, and then whether you go into it or ignore it can depend on which evaluation order you use. with a simple type system (and no recursion, and no explicit combinator for encoding it either), everything terminates, and so you always get to an answer, and then what answer you
2023-07-15 00:44:11 +0200 <ski> get doesn't depend on which path (evaluation order) you take to get there (this is "confluence")
2023-07-15 00:44:47 +0200wroathe(~wroathe@user/wroathe)
2023-07-15 00:45:15 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 246 seconds)
2023-07-15 00:45:27 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2023-07-15 00:46:17 +0200dcoutts(~duncan@212.187.244.53) (Ping timeout: 246 seconds)
2023-07-15 00:46:22 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 272 seconds)
2023-07-15 00:46:45 +0200 <segfaultfizzbuzz> interesting
2023-07-15 00:47:20 +0200 <ski> you might perhaps also enjoy reading
2023-07-15 00:47:23 +0200 <ski> @where mockingbird
2023-07-15 00:47:23 +0200 <lambdabot> "To mock a mockingbird : and other logic puzzles including an amazing adventure in combinatory logic" by R. M. Smullyan, "To Dissect a Mockingbird: A Graphical Notation for the Lambda Calculus with
2023-07-15 00:47:24 +0200 <lambdabot> Animated Reduction" at <http://dkeenan.com/Lambda/> by David C. Keenan. Also see `smullyan'
2023-07-15 00:47:38 +0200 <segfaultfizzbuzz> fine so i could selectively exclude infinite recursion (e.g. the evaluator can suspend at will) then it is evaluation order independent?
2023-07-15 00:47:43 +0200 <ski> it talks about the combinators, from a playful bird analogy
2023-07-15 00:48:40 +0200 <ski> suspend, how ?
2023-07-15 00:48:50 +0200 <zero> oooh do i hear chirping?
2023-07-15 00:48:52 +0200 <probie> Is confluence tied to termination? I was taught that it's the "diamond property" of a rewrite system (i.e if B and C can be reached from A by some rewrites, then there is a D which is reachable from both B and C)
2023-07-15 00:49:07 +0200neuroevolutus(~neuroevol@2001:ac8:9a:76::1e)
2023-07-15 00:49:26 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 250 seconds)
2023-07-15 00:49:37 +0200 <ski> if you use one evaluation order, then the computation might terminate quickly, but if you use another, it might take a long time, and so you might get a time-out .. doesn't sound like independent of evaluation order (depending on how you define that, i guess)
2023-07-15 00:50:43 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 00:50:46 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 00:50:46 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 00:50:46 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 00:51:00 +0200 <ski> probie : not directly. i was remarking that if you have termination, then because you also have confluence, you get to the same result, regardless of which path you take. but if you only have confluence, but not termination, then some evaluations orders may terminate (necessarily with the same result), while others can diverge
2023-07-15 00:51:28 +0200__monty__(~toonn@user/toonn) (Quit: leaving)
2023-07-15 00:51:31 +0200 <ski> (and if you only have termination, but not confluence, then you have a non-deterministic computation, you might end up with different end results, depending on which evaluation order you use)
2023-07-15 00:53:24 +0200 <ski> (hm, seems "Programming with Visual Expressions" by Wayne Citrin,Richard Hall,Benjamin Zorn at <https://web.archive.org/web/20220607041104/http://users.encs.concordia.ca/~haarslev/vl95www/html-p…> expired, so that you need to access it via the Web Archive)
2023-07-15 00:54:57 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 00:54:57 +0200 <segfaultfizzbuzz> oh interesting, it becomes nondeterministic if it is nonterminating?
2023-07-15 00:55:05 +0200 <segfaultfizzbuzz> that's very interesting
2023-07-15 00:55:22 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
2023-07-15 00:55:30 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au) (Ping timeout: 250 seconds)
2023-07-15 00:55:33 +0200 <ski> (also, i don't believe i've seen "lambda-calculus-visualizations: Catalog of visual lambda calculi" <https://github.com/prathyvsh/lambda-calculus-visualizations> before, although i've seen some of the (other) entries, like "Lambda Diagrams","Alligator Eggs")
2023-07-15 00:56:05 +0200 <ski> segfaultfizzbuzz : `const () (fix id)'
2023-07-15 00:56:34 +0200dsrt^(~cd@24.125.210.85)
2023-07-15 00:56:42 +0200 <hpc> segfaultfizzbuzz: it's a pretty intuitive result, even if you think in terms of a language like C
2023-07-15 00:56:51 +0200 <hpc> consider short-circuiting and/or
2023-07-15 00:56:55 +0200 <ski> (nondeterministic, up to choosing the evaluation order, that is. if you've picked an evaluation order, and it doesn't involve making arbitrary choices, then within that evaluation order, it'd still be deterministic)
2023-07-15 00:57:09 +0200 <hpc> 0 || loop()
2023-07-15 00:57:10 +0200 <segfaultfizzbuzz> short circuiting... a program? lol you folks are on another level ;-)
2023-07-15 00:57:43 +0200 <hpc> a program and a function are basically the same thing - try writing a bash script without that idea in mind sometime :D
2023-07-15 00:57:45 +0200 <ski> `y != 0 && foo(x / y)'
2023-07-15 00:58:09 +0200 <hpc> but yeah, with short-circuiting logic, there's no reason why it has to be left-to-right
2023-07-15 00:58:12 +0200 <sm> @where+ learnxinyminutes https://learnxinyminutes.com/docs/haskell
2023-07-15 00:58:12 +0200 <lambdabot> Done.
2023-07-15 00:58:47 +0200 <hpc> so you have confluence, of a sort
2023-07-15 00:59:00 +0200 <hpc> but you don't have termination, because loop() is possible to write at all
2023-07-15 00:59:17 +0200 <hpc> so depending on the evaluation order, you get either 0 or you don't terminate
2023-07-15 00:59:52 +0200 <ski> hm .. very large letters on that page .. i can only see 51 width at a time, without scrolling sideways
2023-07-15 01:01:20 +0200 <ski> "there's no reason why it has to be left-to-right" -- well, with dependent conjunction and implication, there could be, i guess
2023-07-15 01:02:34 +0200 <segfaultfizzbuzz> this is a bit off topic but i have been curious about "smart" evaluation rather than always left to right or always right to left
2023-07-15 01:02:50 +0200falafel(~falafel@2603-7000-a700-8710-e3d6-964f-e7e9-177a.res6.spectrum.com) (Ping timeout: 272 seconds)
2023-07-15 01:02:51 +0200 <ski> `(x : sigma) /\ tau', is well-formed (type-correct), when `sigma' is, and when `tau' is (where `x' of type `sigma') is in scope in `tau'. and similarly for the dependent implication `(x : sigma) -> tau'
2023-07-15 01:02:57 +0200 <segfaultfizzbuzz> but that concept really only makes sense if your computation is not order dependent,...
2023-07-15 01:03:19 +0200 <segfaultfizzbuzz> or if you can accept nondeterminism (maybe nondeterminism is inevitable and you should plan to accomodate it...?)
2023-07-15 01:03:20 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 01:03:48 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 01:03:48 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 01:03:48 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 01:04:18 +0200APic(~apic@apic.name) (Ping timeout: 260 seconds)
2023-07-15 01:04:20 +0200 <ski> the special cases `(_ : sigma) /\ tau' and `(_ : sigma) -> tau' where `x' is not used in `tau', could still have the well-formedness (including well-typedness) of `tau' depending on `sigma' being *inhabited* (from a logical perspective : depending on `sigma' holding / being the case)
2023-07-15 01:05:44 +0200 <ski> so, you can argue that `x =/= 0 /\ f(1/x) > 0' is well-formed, even though `1/x' is not defined when `x' is zero, because you're allowed to assume, when checking the well-formedness of the right conjunct, that the left conjunct is *true* !
2023-07-15 01:06:53 +0200 <ski> (this is an example of a "presupposition". the formula `f(1/x)' being wellformed presupposes that `x' is non-zero. this presupposition is discharged by the left conjunct in this conjunction, so that it's no longer a presupposition (/ dependency) of the whole conjunction)
2023-07-15 01:07:16 +0200 <segfaultfizzbuzz> interesting
2023-07-15 01:07:54 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 01:08:28 +0200zerothinks of https://esolangs.org/wiki/Whenever
2023-07-15 01:09:01 +0200segfaultfizzbuzzthinks of https://www.youtube.com/watch?v=weRHyjj34ZE
2023-07-15 01:11:14 +0200 <ski> (a more mundane example would be "Have you stopped beating your wife yet ?" (it's a traditiona one, on this topic) -- a presupposition of this question is "You did beat your wife at some point.". if that presupposition is false, then you can (truthfully) answer neither "yes" nor "no". strictly speaking, the question is malformed, "type incorrect", "inadmissible", doesn't make sense. you could answer "mu"
2023-07-15 01:11:20 +0200 <ski> (see <https://en.wikipedia.org/wiki/Mu_(negative)>,<http://www.catb.org/jargon/html/M/mu.html>), though, to "unask" the question)
2023-07-15 01:11:35 +0200 <segfaultfizzbuzz> ay maybe we could use a different example
2023-07-15 01:11:57 +0200dcoutts(~duncan@79.137.104.194)
2023-07-15 01:12:24 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au)
2023-07-15 01:12:24 +0200segfaultfizzbuzzthinks of https://chrono.fandom.com/wiki/Nu
2023-07-15 01:12:26 +0200 <ski> (<https://en.wikipedia.org/wiki/Definite_description> is also related to this)
2023-07-15 01:12:52 +0200 <ski> heh, i remember those, segfaultfizzbuzz :p
2023-07-15 01:13:09 +0200sm[i](~sm@024-165-041-186.res.spectrum.com) (Quit: sm[i])
2023-07-15 01:13:38 +0200 <segfaultfizzbuzz> haha a programming language with no sense of urgency lol
2023-07-15 01:13:59 +0200 <segfaultfizzbuzz> wait wow what, no control flow or variables? wow
2023-07-15 01:16:12 +0200dcoutts(~duncan@79.137.104.194) (Ping timeout: 245 seconds)
2023-07-15 01:17:02 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au) (Ping timeout: 245 seconds)
2023-07-15 01:17:08 +0200andydude(~andrewr@151.200.15.152)
2023-07-15 01:18:42 +0200bilegeek(~bilegeek@2600:1008:b05a:b7e5:c4f0:94df:26fd:4b15) (Ping timeout: 245 seconds)
2023-07-15 01:22:07 +0200APic(apic@apic.name)
2023-07-15 01:22:13 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 01:24:53 +0200sm[i](~sm@024-165-041-186.res.spectrum.com)
2023-07-15 01:27:08 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
2023-07-15 01:27:26 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 246 seconds)
2023-07-15 01:36:00 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi) (Quit: Leaving.)
2023-07-15 01:37:11 +0200mechap(~mechap@user/mechap) (Ping timeout: 264 seconds)
2023-07-15 01:37:37 +0200mechap(~mechap@user/mechap)
2023-07-15 01:41:49 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 01:42:40 +0200mauke_(~mauke@user/mauke)
2023-07-15 01:44:12 +0200mauke(~mauke@user/mauke) (Ping timeout: 252 seconds)
2023-07-15 01:44:12 +0200mauke_mauke
2023-07-15 01:49:35 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 01:49:38 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 246 seconds)
2023-07-15 01:53:42 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 01:55:06 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au)
2023-07-15 01:55:21 +0200falafel(~falafel@2603-7000-a700-8710-6966-48e1-9920-70bf.res6.spectrum.com)
2023-07-15 01:56:45 +0200falafel(~falafel@2603-7000-a700-8710-6966-48e1-9920-70bf.res6.spectrum.com) (Remote host closed the connection)
2023-07-15 01:57:18 +0200oo_miguel(~Thunderbi@78-11-179-96.static.ip.netia.com.pl) (Ping timeout: 272 seconds)
2023-07-15 01:57:27 +0200APic(apic@apic.name) (Ping timeout: 245 seconds)
2023-07-15 02:00:01 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au) (Ping timeout: 245 seconds)
2023-07-15 02:04:44 +0200andydude(~andrewr@151.200.15.152) (Quit: Leaving.)
2023-07-15 02:08:17 +0200falafel(~falafel@2603-7000-a700-8710-9f29-d133-dde2-555f.res6.spectrum.com)
2023-07-15 02:13:21 +0200 <segfaultfizzbuzz> so when you read a paper inevitably there are a bunch of definitions,... do you read and retain those definitions? do you skim them looking for specific things? can you recall the definitions from a week ago? a year ago? ten years ago?
2023-07-15 02:16:08 +0200 <geekosaur> many definitions are per paper
2023-07-15 02:16:58 +0200 <geekosaur> unfortunately you can't always tell which are which
2023-07-15 02:17:14 +0200 <segfaultfizzbuzz> i am asking what your retention is like
2023-07-15 02:17:29 +0200 <segfaultfizzbuzz> i am stuck in a cycle where i hear about a paper and i try to read it
2023-07-15 02:17:35 +0200 <geekosaur> my retention is … not others' retention 🙂
2023-07-15 02:17:41 +0200 <segfaultfizzbuzz> i think my attention falls of roughly like exponentially with number of definitions
2023-07-15 02:18:17 +0200 <ski> it can help to skip things you don't quite get, and possibly later return (or perhaps try to look up more in-depth or newbie intro info on it, like tutorial, survey, or (more) seminal or summary papers, perhaps looking for suggestions in the references/bibliography section)
2023-07-15 02:18:19 +0200 <segfaultfizzbuzz> i think if somehow i am persuaded that it is one of the most important concepts (i don't know, shannon entropy or something) then i can really read at a more constant comprehension
2023-07-15 02:18:42 +0200 <segfaultfizzbuzz> but otherwise reading is basically denial of service, because so many things are constantly claiming to be important and i am let down so incredibly often
2023-07-15 02:18:59 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 02:19:45 +0200 <segfaultfizzbuzz> technical papers are mostly but not strictly cumulative order in their uh dependency graph
2023-07-15 02:23:17 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 02:24:29 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14::ac08)
2023-07-15 02:28:50 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14::ac08) (Ping timeout: 246 seconds)
2023-07-15 02:30:38 +0200gurkenglas(~gurkengla@dynamic-046-114-181-072.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2023-07-15 02:33:27 +0200sm[i](~sm@024-165-041-186.res.spectrum.com) (Quit: sm[i])
2023-07-15 02:34:44 +0200nyc(~nyc@2603-7000-a106-2fb5-0000-0000-0000-1f21.res6.spectrum.com)
2023-07-15 02:39:04 +0200buckwheatsuperpo(~buckwheat@209.122.211.192)
2023-07-15 02:39:15 +0200pickleju1ce(~root@c-73-196-164-60.hsd1.nj.comcast.net)
2023-07-15 02:39:17 +0200picklejuice(~root@172.56.219.136) (Read error: Connection reset by peer)
2023-07-15 02:41:40 +0200buckwheat(~buckwheat@209.122.211.192) (Ping timeout: 250 seconds)
2023-07-15 02:41:43 +0200alexbiehl(~alexbiehl@77.20.253.164)
2023-07-15 02:42:58 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 250 seconds)
2023-07-15 02:45:59 +0200alexbiehl(~alexbiehl@77.20.253.164) (Ping timeout: 246 seconds)
2023-07-15 02:54:18 +0200hugo(znc@verdigris.lysator.liu.se) (Ping timeout: 272 seconds)
2023-07-15 02:54:36 +0200mei(~mei@user/mei) (Ping timeout: 252 seconds)
2023-07-15 02:57:31 +0200arahael_(~arahael@1.145.21.117)
2023-07-15 02:58:39 +0200mei(~mei@user/mei)
2023-07-15 02:59:07 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 03:00:11 +0200falafel(~falafel@2603-7000-a700-8710-9f29-d133-dde2-555f.res6.spectrum.com) (Ping timeout: 246 seconds)
2023-07-15 03:01:57 +0200andydude(~andrewr@151.200.15.152)
2023-07-15 03:02:34 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-07-15 03:03:48 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 03:07:06 +0200hugo(znc@verdigris.lysator.liu.se)
2023-07-15 03:10:04 +0200Midjak(~Midjak@82.66.147.146) (Quit: This computer has gone to sleep)
2023-07-15 03:10:51 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8) (Remote host closed the connection)
2023-07-15 03:16:58 +0200albet70(~xxx@2400:8902::f03c:92ff:fe60:98d8)
2023-07-15 03:17:26 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Remote host closed the connection)
2023-07-15 03:18:39 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-07-15 03:22:58 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.1)
2023-07-15 03:25:58 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Ping timeout: 272 seconds)
2023-07-15 03:27:52 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 272 seconds)
2023-07-15 03:28:53 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-07-15 03:28:53 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-07-15 03:28:53 +0200wroathe(~wroathe@user/wroathe)
2023-07-15 03:29:14 +0200aforemny(~aforemny@2001:9e8:6ced:8a00:6429:b02a:8db7:75db)
2023-07-15 03:29:46 +0200aforemny_(~aforemny@2001:9e8:6cd3:fb00:3e3b:718b:2209:2cf8) (Ping timeout: 272 seconds)
2023-07-15 03:33:34 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-07-15 03:36:26 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-07-15 03:37:00 +0200neuroevolutus(~neuroevol@2001:ac8:9a:76::1e) (Quit: Client closed)
2023-07-15 03:44:32 +0200 <arahael_> What does this mean?
2023-07-15 03:44:54 +0200 <arahael_> class (Monad m) => MonadError e m | m -> e where...
2023-07-15 03:44:55 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 03:45:18 +0200 <arahael_> Specifically what does the `| m -> e` bit mean?
2023-07-15 03:45:18 +0200 <ski> the FD ? ` | m -> e' ?
2023-07-15 03:45:29 +0200 <ski> it's a functional dependency (FD)
2023-07-15 03:46:00 +0200 <ski> it claims that `m' (functionally) determines `e' (in the context of `MonadError e m')
2023-07-15 03:46:27 +0200 <ski> this means that there can't be two different instances, with different `e's, for the same `m'
2023-07-15 03:46:31 +0200 <arahael_> Ah, interesting. What does that mean? :D
2023-07-15 03:46:52 +0200 <arahael_> Why is it worth specifying?
2023-07-15 03:47:01 +0200 <ski> for each type `m', there can be at most one `e', such that there is an instance `MonadError m e'
2023-07-15 03:47:14 +0200 <c_wraith> mostly, it lets GHC unify e types when it only knows m types
2023-07-15 03:47:36 +0200 <arahael_> Intriguing, so it's giving more information to the type system?
2023-07-15 03:47:48 +0200 <arahael_> (I mean, it's giving more info to the type system so that the type system can tell you if you've made a mistake giving more than one instance when it doesn't make sense to do so?)
2023-07-15 03:47:54 +0200 <c_wraith> well, and placing a restriction on the kind of instances you can make
2023-07-15 03:48:03 +0200 <arahael_> Neat.
2023-07-15 03:48:10 +0200 <ski> logically, you could phrase that as `forall m. unique e. MonadError m e'. this is logically equivalent to `forall m e0 e1. (MonadError m e0,MonadError m e1) => e0 = e1'. if there's two instances with the same `m', then that means the `e's must already be the same (so that it's the same instance, in this particular case)
2023-07-15 03:49:01 +0200 <ski> the effect is in two parts : (a) forbidding you having both `MonadError MyM MyE0' and `MonadError MyM MyE1' in scope in the same module (for `MyE0' different from `MyE1')
2023-07-15 03:50:02 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 03:50:56 +0200 <arahael_> Cool, ,I think that's enough for me for the moment - it sounds good.
2023-07-15 03:51:48 +0200 <ski> and (b) this means that if type inference infers two constraints `MonadError m e0' and `MonadError m e1' (for the same `m'), because it knows there can't be two instances, it can just assert that `e0' must be the same as `e1' (unifying those type, in the type inference), and replacing those two constraints with a single constraint `MonadError m e' (so, in terms of dictionary-passing, you'll just pass one
2023-07-15 03:51:54 +0200 <ski> dictionary (unless the constraint gets pinned down exactly, like say `MonadError (ExceptT MyError m) MyError', in which case there needs to be no implicit dictionary passing there to the operation you're defining)
2023-07-15 03:52:46 +0200 <arahael_> So it's also an optimisation.
2023-07-15 03:53:08 +0200 <ski> this (b) part can really help with avoiding getting ambiguous types (since if `e0' is not pinned down by something in your code, but `e1' is, then that avoids ambiguity for `e0'. so that avoids you having to place an explicit type signature or ascription, or looking into using a more specialized (equivalent) operation, to avoid ambiguity)
2023-07-15 03:53:44 +0200 <arahael_> Oh nice, so it makes specifying your explicit types more convenient also.
2023-07-15 03:53:55 +0200 <arahael_> (Since there's less you have to explicitly state)
2023-07-15 03:54:50 +0200 <ski> i'd say the main theoretical part is accurately modelling the domain. if what you're trying to model implies there ought to be these "functional dependency" constraints, then it helps being able to get that checked (when declaring and importing instances), and also exploited (when using operations that have constraints)
2023-07-15 03:55:02 +0200 <ski> the main practical part is avoiding ambiguity
2023-07-15 03:55:37 +0200 <arahael_> Makes sense.
2023-07-15 03:56:03 +0200 <ski> in case you know anything about relational databases, you should note that the concept of "functional dependency" there (in terms of keys, and normalization of relations/tables) is basically the same concept, just in a different application domain
2023-07-15 03:57:06 +0200 <arahael_> That's a good analogy, actually. I do know relational databases.]
2023-07-15 03:58:29 +0200 <arahael_> I'm just working through the 'all about monads' wiki page. It's slightly annoying having to define Applicative and Functional instances in addition to each monad we play with, I guess that's relatively new.
2023-07-15 03:58:54 +0200 <ski> btw, often you can use associated types instead of functional dependencies. like instead of `class Monad m => MonadError e m | m -> e where ..m..e..' you could have said `class Monad m => MonadError m where type ErrorOfMonad m; ..m..(ErrorOfMonad m)..', where `e's replaced by `ErrorOfMonad m'
2023-07-15 04:00:16 +0200 <arahael_> I think I'll focus on that a bit later.
2023-07-15 04:00:35 +0200 <ski> however, say you have `class Foo a b | a -> b , b -> a' or `class Bar a b c d | a b -> c , a d -> b , c d -> a' (i'm not sure if there's any redundant FDs there (implied by others), i just made up the example on the spot), it's not as clear always which parameter to turn into an associated type
2023-07-15 04:01:21 +0200 <arahael_> How woul that work, you're saying there that a and b can derive each other?
2023-07-15 04:02:36 +0200 <ski> (there's also a notion of "injectivity constraints" for type families (which are more general than associated types, since they can occur outside of `class' declarations), that's related)
2023-07-15 04:02:44 +0200 <ski> yes
2023-07-15 04:05:41 +0200APic(apic@apic.name)
2023-07-15 04:06:33 +0200 <ski> (historically, associated types, and type families (and the closely related associated data types, and data families), came years later, than the easier to imagine multi-parameter type classes, and functional dependencies. basically, as soon as people started experimenting with MPTCs, they noticed ambiguity problems with some of the stuff they wanted to model, and so FDs were born)
2023-07-15 04:06:50 +0200zeroyin
2023-07-15 04:07:15 +0200 <ski> oh, btw, i guess i should give one example of the logical meaning, when you have more parameters, but you don't use all of them in an FD
2023-07-15 04:08:44 +0200 <ski> consider `class Baz a b c d | a b -> c where ...'. the FD here logically expresses `forall a b. unique c. exists d. Baz a b c d'. which amounts to `forall a b c0 c1 d0 d1. (Baz a b c0 d0,Baz a b c1 d1) => c0 = c1'
2023-07-15 04:09:02 +0200td_(~td@i5387091B.versanet.de) (Ping timeout: 272 seconds)
2023-07-15 04:09:13 +0200 <ski> in words : if you have two instances, with the `a's and the `b's the same, then the `c's also have to be the same (and we don't care about the `d's)
2023-07-15 04:10:23 +0200td_(~td@i5387091F.versanet.de)
2023-07-15 04:11:31 +0200 <ski> (generally speaking, `unique x. ..x..' is equivalent to `forall x0 x1. (..x0..,..x1..) => x0 = x1'. then i also used the logical equivalence between `(exists x. ..x..) => ...' and `forall x. (..x.. => ...)' above)
2023-07-15 04:14:19 +0200 <andydude> I miss Haskell
2023-07-15 04:15:25 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 04:16:54 +0200 <andydude> a stupid YT about Rust reminded me of Haskell
2023-07-15 04:16:55 +0200razetime(~quassel@117.193.0.33)
2023-07-15 04:18:28 +0200 <arahael_> Rust does have a number of fairly nice similarities in an arguably more mainstream language package.
2023-07-15 04:20:32 +0200 <ski> (hm .. mode declarations in Mercury (and i think in some Prologs, too), are also related to (although more general, and in general more operational, than FDs). e.g. there's a relation/predicate `append(Xs,Ys,Zs)' which corresponds to `xs ++ ys = zs' in Haskell terms. there are mode declarations, one stating that if `Xs' and `Ys' are known, then there exists a unique correspond `Zs' (obviously), but also that
2023-07-15 04:20:36 +0200 <andydude> https://youtu.be/TGfQu0bQTKc
2023-07-15 04:20:38 +0200 <ski> given known `Xs',`Zs', there can be at most one `Ys' (which the same source code will compute for you, giving you both `(++)' and `stripPrefix' (and some more, too) in one single (declaratively/logically coherent) operation)
2023-07-15 04:20:45 +0200justsomeguy(~justsomeg@user/justsomeguy)
2023-07-15 04:21:32 +0200 <andydude> Aside from types and pattern matching, I'm having trouble seeing why there's such a connection between Rust and Haskell...
2023-07-15 04:22:30 +0200 <glguy> There's commonality between traits and typeclasses
2023-07-15 04:22:48 +0200 <andydude> perhaps it's the std library's proclivity towards functional style?
2023-07-15 04:24:20 +0200buckwheatsuperpo(~buckwheat@209.122.211.192) (Ping timeout: 246 seconds)
2023-07-15 04:24:53 +0200buckwheatsuperpo(~buckwheat@209.122.211.192)
2023-07-15 04:25:11 +0200 <yin> ADTs, people
2023-07-15 04:25:27 +0200 <ski> hm, last i checked, you can't do full existentials in Rust, iow you can't express stuff like `exists a. Frob a *> Map Key a', but only `exists a. Frob a *> a', associating the "trait" with a single value of the unknown/abstract/opaque/forgotten/skolem type. so you can't share a single dictionary for multiple of them, simultaneously ensuring that they're all of the same (unknown) type
2023-07-15 04:25:51 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 04:26:22 +0200codaraxis(~codaraxis@user/codaraxis) (Quit: Leaving)
2023-07-15 04:30:01 +0200thegeekinside(~thegeekin@189.217.90.138)
2023-07-15 04:30:34 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 04:33:48 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 04:35:16 +0200justsomeguy(~justsomeg@user/justsomeguy) (Quit: WeeChat 3.6)
2023-07-15 04:36:32 +0200thegeekinside(~thegeekin@189.217.90.138) (Remote host closed the connection)
2023-07-15 04:39:28 +0200 <glguy> Other than cargo.toml, anyone have any favorite toml file consumers they can think of?
2023-07-15 04:40:26 +0200 <andydude> You mean like how JSON is used everywhere?
2023-07-15 04:41:23 +0200 <glguy> Yeah, "what things do you use that consume JSON?" would have a lot of answers :)
2023-07-15 04:43:00 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 04:43:06 +0200 <segfaultfizzbuzz> what lol i had to do a double take what room i was in,... you can find a list of places toml is used on its wikipedia entry,... are you looking for test cases for a parser or what?
2023-07-15 04:43:14 +0200AkechiShiro(~licht@user/akechishiro) (Quit: WeeChat 4.0.2)
2023-07-15 04:43:14 +0200ft(~ft@p508db7ce.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-07-15 04:43:37 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Quit: Lost terminal)
2023-07-15 04:45:06 +0200 <glguy> I'm looking for variety of schemas that get used to inform a module I'm working on
2023-07-15 04:45:13 +0200ft(~ft@p3e9bc647.dip0.t-ipconnect.de)
2023-07-15 04:45:17 +0200 <glguy> but yes, I've heard of wikipedia
2023-07-15 04:47:25 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 240 seconds)
2023-07-15 04:48:46 +0200buckwheatsuperpo(~buckwheat@209.122.211.192) (Ping timeout: 260 seconds)
2023-07-15 04:48:59 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-07-15 04:52:38 +0200chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 240 seconds)
2023-07-15 04:54:11 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 245 seconds)
2023-07-15 04:54:21 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 04:56:28 +0200FinnElija(~finn_elij@user/finn-elija/x-0085643) (Killed (NickServ (Forcing logout FinnElija -> finn_elija)))
2023-07-15 04:56:28 +0200finn_elija(~finn_elij@user/finn-elija/x-0085643)
2023-07-15 04:56:29 +0200finn_elijaFinnElija
2023-07-15 04:58:38 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 05:03:41 +0200buckwheatsuperpo(~buckwheat@209.122.211.192)
2023-07-15 05:03:54 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-07-15 05:05:12 +0200aforemny_(~aforemny@2001:9e8:6cf7:a100:5893:6a08:1072:daeb)
2023-07-15 05:05:22 +0200aforemny(~aforemny@2001:9e8:6ced:8a00:6429:b02a:8db7:75db) (Ping timeout: 245 seconds)
2023-07-15 05:07:52 +0200buckwheatsuperpo(~buckwheat@209.122.211.192) (Ping timeout: 245 seconds)
2023-07-15 05:15:55 +0200chexum(~quassel@gateway/tor-sasl/chexum)
2023-07-15 05:16:16 +0200Fischmiep(~Fischmiep@user/Fischmiep)
2023-07-15 05:19:06 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 260 seconds)
2023-07-15 05:19:24 +0200arahael_(~arahael@1.145.21.117) (Ping timeout: 250 seconds)
2023-07-15 05:35:05 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 05:41:56 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Remote host closed the connection)
2023-07-15 05:45:18 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 05:46:16 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 05:47:50 +0200razetime(~quassel@117.193.0.33) (Ping timeout: 272 seconds)
2023-07-15 05:53:35 +0200falafel(~falafel@2603-7000-a700-8710-d0d8-372c-d9a9-7a6e.res6.spectrum.com)
2023-07-15 05:55:19 +0200azimut(~azimut@gateway/tor-sasl/azimut)
2023-07-15 05:57:02 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2023-07-15 05:57:41 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 06:02:23 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 264 seconds)
2023-07-15 06:04:05 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 06:08:44 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 06:10:46 +0200Inst_(~Inst@2601:6c4:4081:2fc0:d47a:e985:6970:4dd5)
2023-07-15 06:11:54 +0200ddellacosta(~ddellacos@146.70.166.140) (Ping timeout: 272 seconds)
2023-07-15 06:12:48 +0200 <segfaultfizzbuzz> what aspects of a function make it more difficult to prove equivalence to another function and roughly speaking what do the scaling laws look like
2023-07-15 06:13:10 +0200 <segfaultfizzbuzz> for example maybe as a function has another step of recursion it becomes twice as difficult to prove equivalence to another function
2023-07-15 06:21:08 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 06:25:50 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 06:27:19 +0200Inst_(~Inst@2601:6c4:4081:2fc0:d47a:e985:6970:4dd5) (Remote host closed the connection)
2023-07-15 06:27:41 +0200Inst_(~Inst@2601:6c4:4081:2fc0:d47a:e985:6970:4dd5)
2023-07-15 06:33:47 +0200notzmv(~zmv@user/notzmv)
2023-07-15 06:34:01 +0200ddellacosta(~ddellacos@143.244.47.68)
2023-07-15 06:36:15 +0200razetime(~quassel@117.193.0.33)
2023-07-15 06:42:06 +0200razetime(~quassel@117.193.0.33) (Ping timeout: 245 seconds)
2023-07-15 06:44:27 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 06:45:04 +0200 <monochrom> Gödel incompleteness and the halting problem are why proving function equality is difficult.
2023-07-15 06:46:04 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 250 seconds)
2023-07-15 06:48:53 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 06:50:22 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Quit: Leaving)
2023-07-15 06:52:27 +0200dtman34(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Quit: ZNC 1.8.2+deb2+b1 - https://znc.in)
2023-07-15 06:52:56 +0200shapr(~user@2600:1700:c640:3100:cde4:ca2f:725:21b4) (Ping timeout: 246 seconds)
2023-07-15 06:53:06 +0200dtman34(~dtman34@2601:447:d000:93c9:ef2b:8d31:cda1:73ec)
2023-07-15 06:53:47 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 246 seconds)
2023-07-15 06:56:21 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 06:57:30 +0200pickleju1ce(~root@c-73-196-164-60.hsd1.nj.comcast.net) (Ping timeout: 272 seconds)
2023-07-15 07:01:04 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 07:01:25 +0200sm[i](~sm@024-165-041-186.res.spectrum.com)
2023-07-15 07:01:56 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 07:02:16 +0200 <sm> In time for Rust 1.71: Interview With Senior Rust Developer in 2023 https://www.youtube.com/watch?v=TGfQu0bQTKc
2023-07-15 07:02:34 +0200 <sm> includes some nice shouts to Haskell
2023-07-15 07:02:43 +0200actioninja63(~actioninj@user/actioninja)
2023-07-15 07:06:33 +0200dtman34_(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
2023-07-15 07:07:38 +0200dtman34(~dtman34@2601:447:d000:93c9:ef2b:8d31:cda1:73ec) (Ping timeout: 272 seconds)
2023-07-15 07:09:22 +0200azimut_(~azimut@gateway/tor-sasl/azimut)
2023-07-15 07:09:44 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 07:10:25 +0200dtman34_(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Client Quit)
2023-07-15 07:10:52 +0200dtman34(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
2023-07-15 07:12:18 +0200azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2023-07-15 07:12:50 +0200dtman34(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net) (Remote host closed the connection)
2023-07-15 07:13:06 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2023-07-15 07:13:36 +0200dtman34(~dtman34@c-76-156-89-180.hsd1.mn.comcast.net)
2023-07-15 07:14:22 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 07:15:57 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 07:16:30 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 07:20:18 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
2023-07-15 07:20:51 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 245 seconds)
2023-07-15 07:21:06 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 07:24:58 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 07:25:25 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 240 seconds)
2023-07-15 07:25:50 +0200dcoutts(~duncan@212.187.244.66)
2023-07-15 07:30:26 +0200dcoutts(~duncan@212.187.244.66) (Ping timeout: 245 seconds)
2023-07-15 07:30:37 +0200fweht(uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2023-07-15 07:32:28 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 07:33:22 +0200mbuf(~Shakthi@49.207.178.186)
2023-07-15 07:34:32 +0200falafel(~falafel@2603-7000-a700-8710-d0d8-372c-d9a9-7a6e.res6.spectrum.com) (Ping timeout: 245 seconds)
2023-07-15 07:36:29 +0200lav(~pi@wikipedia/maddy-from-celeste) (Ping timeout: 246 seconds)
2023-07-15 07:36:37 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 245 seconds)
2023-07-15 07:36:50 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 07:36:52 +0200lav(~pi@wikipedia/maddy-from-celeste)
2023-07-15 07:38:06 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 07:43:20 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 246 seconds)
2023-07-15 07:44:24 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 07:46:51 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de)
2023-07-15 07:47:03 +0200trev(~trev@user/trev)
2023-07-15 07:48:44 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 07:53:55 +0200YoungFrog(~youngfrog@2a02:a03f:ca07:f900:f0ec:6c5a:a5bd:1b2)
2023-07-15 07:56:24 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 272 seconds)
2023-07-15 08:00:21 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 08:01:12 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 08:04:38 +0200bontaq(~user@ool-45779b84.dyn.optonline.net) (Ping timeout: 272 seconds)
2023-07-15 08:05:22 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 08:07:35 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 08:08:42 +0200neuroevolutus(~neuroevol@2001:ac8:9a:76::1e)
2023-07-15 08:08:43 +0200dcoutts(~duncan@185.201.60.220)
2023-07-15 08:11:55 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 240 seconds)
2023-07-15 08:12:35 +0200myme(~myme@2a01:799:d60:e400:a779:7b8:869:aeae) (Ping timeout: 264 seconds)
2023-07-15 08:13:03 +0200neuroevolutus(~neuroevol@2001:ac8:9a:76::1e) (Client Quit)
2023-07-15 08:13:34 +0200myme(~myme@2a01:799:d60:e400:6b55:76d2:6f55:56c)
2023-07-15 08:13:48 +0200curby(~curby@cpe-76-183-125-175.tx.res.rr.com) (Read error: Connection reset by peer)
2023-07-15 08:18:45 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-07-15 08:18:56 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 08:21:04 +0200fweht(uid404746@id-404746.lymington.irccloud.com)
2023-07-15 08:21:55 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-07-15 08:23:38 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 08:29:14 +0200acidjnk(~acidjnk@p200300d6e7072f973457f07d23c910df.dip0.t-ipconnect.de)
2023-07-15 08:36:15 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14::ac08)
2023-07-15 08:37:27 +0200dcoutts(~duncan@185.201.60.220) (Ping timeout: 245 seconds)
2023-07-15 08:40:24 +0200rainbyte(~rainbyte@181.31.239.226)
2023-07-15 08:40:42 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14::ac08) (Ping timeout: 260 seconds)
2023-07-15 08:41:34 +0200gmg(~user@user/gehmehgeh)
2023-07-15 08:46:45 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2023-07-15 08:47:37 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 08:48:48 +0200bliminse(~bliminse@user/bliminse) (Quit: leaving)
2023-07-15 08:52:46 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 09:00:32 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 09:03:38 +0200mechap(~mechap@user/mechap) (Ping timeout: 246 seconds)
2023-07-15 09:04:25 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 240 seconds)
2023-07-15 09:04:55 +0200mechap(~mechap@user/mechap)
2023-07-15 09:05:00 +0200takuan(~takuan@178-116-218-225.access.telenet.be)
2023-07-15 09:11:46 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 09:13:32 +0200andydude(~andrewr@151.200.15.152) ()
2023-07-15 09:15:21 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de)
2023-07-15 09:16:49 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 09:17:00 +0200jrm(~jrm@user/jrm) (Quit: ciao)
2023-07-15 09:17:20 +0200jrm(~jrm@user/jrm)
2023-07-15 09:17:50 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 09:20:17 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 09:21:08 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 246 seconds)
2023-07-15 09:32:11 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 09:33:48 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 09:35:59 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 264 seconds)
2023-07-15 09:36:16 +0200euandreh(~Thunderbi@189.6.18.7) (Ping timeout: 245 seconds)
2023-07-15 09:39:11 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 245 seconds)
2023-07-15 09:44:04 +0200ddellacosta(~ddellacos@143.244.47.68) (Ping timeout: 272 seconds)
2023-07-15 09:47:21 +0200econo_(uid147250@id-147250.tinside.irccloud.com) (Quit: Connection closed for inactivity)
2023-07-15 09:47:52 +0200elkcl(~elkcl@broadband-95-84-180-37.ip.moscow.rt.ru) (Ping timeout: 272 seconds)
2023-07-15 09:48:34 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 09:50:13 +0200 <claro> λ
2023-07-15 09:50:16 +0200 <claro> oop
2023-07-15 09:52:04 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net)
2023-07-15 09:53:34 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 09:55:30 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 09:55:47 +0200elkcl(~elkcl@broadband-95-84-180-37.ip.moscow.rt.ru)
2023-07-15 09:57:08 +0200euandreh(~Thunderbi@189.6.18.7)
2023-07-15 09:58:08 +0200 <jade[m]> lambda indeed
2023-07-15 10:04:06 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Remote host closed the connection)
2023-07-15 10:04:21 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 10:13:29 +0200oo_miguel(~Thunderbi@78-11-179-96.static.ip.netia.com.pl)
2023-07-15 10:15:24 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl)
2023-07-15 10:20:28 +0200Tuplanolla(~Tuplanoll@91-159-68-236.elisa-laajakaista.fi)
2023-07-15 10:21:29 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-07-15 10:24:38 +0200bliminse(~bliminse@user/bliminse)
2023-07-15 10:30:25 +0200tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2023-07-15 10:30:37 +0200fweht(uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2023-07-15 10:34:26 +0200hackyhacker(~hackyhack@2a05:f480:1400:24b2:5400:4ff:fe76:a8f3)
2023-07-15 10:37:16 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 272 seconds)
2023-07-15 10:40:35 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-07-15 10:42:58 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 240 seconds)
2023-07-15 10:45:12 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:6cd6:b2b2:8eef:d429) (Remote host closed the connection)
2023-07-15 10:45:59 +0200bitdex(~bitdex@gateway/tor-sasl/bitdex)
2023-07-15 10:49:10 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 10:49:32 +0200 <claro> ;>
2023-07-15 10:53:42 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 260 seconds)
2023-07-15 10:55:56 +0200claro_(~claro@45.84.139.156)
2023-07-15 10:56:34 +0200claro_(~claro@45.84.139.156) (Client Quit)
2023-07-15 10:57:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-07-15 10:58:00 +0200claro_(~claro@user/Claro)
2023-07-15 10:58:08 +0200claro_(~claro@user/Claro) (Client Quit)
2023-07-15 10:59:26 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 272 seconds)
2023-07-15 11:00:11 +0200ft(~ft@p3e9bc647.dip0.t-ipconnect.de) (Ping timeout: 246 seconds)
2023-07-15 11:00:13 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 11:00:30 +0200claro_(~claro@user/Claro)
2023-07-15 11:01:01 +0200ft(~ft@p4fc2a1e5.dip0.t-ipconnect.de)
2023-07-15 11:04:53 +0200claro_(~claro@user/Claro) (Client Quit)
2023-07-15 11:05:08 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 272 seconds)
2023-07-15 11:05:20 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 11:05:20 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 11:05:20 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 11:08:52 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 252 seconds)
2023-07-15 11:10:01 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Remote host closed the connection)
2023-07-15 11:10:34 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 11:11:31 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-07-15 11:11:43 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 11:17:00 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 11:17:24 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 11:21:42 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 252 seconds)
2023-07-15 11:23:49 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 11:28:17 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 11:31:17 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 11:33:00 +0200titibandit(~titibandi@user/titibandit)
2023-07-15 11:33:46 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 245 seconds)
2023-07-15 11:33:48 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 250 seconds)
2023-07-15 11:35:09 +0200Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2023-07-15 11:35:32 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 11:38:24 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 11:39:28 +0200mei(~mei@user/mei) (Quit: mei)
2023-07-15 11:41:42 +0200mei(~mei@user/mei)
2023-07-15 11:41:59 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Read error: Connection reset by peer)
2023-07-15 11:42:59 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-07-15 11:45:43 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:708b:7aa2:8b48:d8a9)
2023-07-15 11:48:52 +0200Inst__(~Inst@2601:6c4:4081:2fc0:d87:979c:1a0c:2c8c)
2023-07-15 11:49:55 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:708b:7aa2:8b48:d8a9) (Ping timeout: 240 seconds)
2023-07-15 11:52:28 +0200Tlsx(~rscastilh@187.40.124.54)
2023-07-15 11:52:41 +0200Inst_(~Inst@2601:6c4:4081:2fc0:d47a:e985:6970:4dd5) (Ping timeout: 246 seconds)
2023-07-15 11:56:55 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 240 seconds)
2023-07-15 11:57:39 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-07-15 11:58:39 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 12:00:38 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-07-15 12:01:55 +0200Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2023-07-15 12:04:14 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 246 seconds)
2023-07-15 12:04:55 +0200mei(~mei@user/mei) (Ping timeout: 240 seconds)
2023-07-15 12:09:54 +0200jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 246 seconds)
2023-07-15 12:12:40 +0200__monty__(~toonn@user/toonn)
2023-07-15 12:15:50 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 12:15:50 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 12:15:50 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 12:20:23 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 264 seconds)
2023-07-15 12:22:53 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au)
2023-07-15 12:26:28 +0200marea_(~francesco@151.43.229.234)
2023-07-15 12:28:46 +0200sm[i](~sm@024-165-041-186.res.spectrum.com) (Quit: sm[i])
2023-07-15 12:29:27 +0200perrierjouet(~perrierjo@modemcable048.127-56-74.mc.videotron.ca)
2023-07-15 12:30:57 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Remote host closed the connection)
2023-07-15 12:31:52 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 12:32:13 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 12:33:05 +0200marea_(~francesco@151.43.229.234) (Remote host closed the connection)
2023-07-15 12:33:37 +0200danza(~francesco@151.43.229.234)
2023-07-15 12:36:12 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 12:36:50 +0200pavonia(~user@user/siracusa) (Read error: Connection reset by peer)
2023-07-15 12:38:17 +0200danza(~francesco@151.43.229.234) (Remote host closed the connection)
2023-07-15 12:38:30 +0200danza(~francesco@151.43.229.234)
2023-07-15 12:39:33 +0200pavonia(~user@user/siracusa)
2023-07-15 12:42:48 +0200danza(~francesco@151.43.229.234) (Ping timeout: 246 seconds)
2023-07-15 12:43:23 +0200 <arahael_> So I'm working through the haskell wiki again for: https://wiki.haskell.org/All_About_Monads#The_State_monad and I'm wondering how does one implement that MonadState typeclass and instance without those language extensions?
2023-07-15 12:43:34 +0200 <arahael_> It seems to require three language extensions..
2023-07-15 12:47:07 +0200picklejuice(~root@c-73-196-164-60.hsd1.nj.comcast.net)
2023-07-15 12:53:00 +0200shriekingnoise(~shrieking@186.137.175.87) (Ping timeout: 252 seconds)
2023-07-15 12:55:48 +0200 <ncf> you could monomorphise the state, i guess?
2023-07-15 12:57:12 +0200 <ncf> or do dictionary passing
2023-07-15 12:58:48 +0200 <arahael_> ncf: My haskell is still rather basic, do you have an article about that?
2023-07-15 12:59:21 +0200 <arahael_> I guess in a way of speaking, I'm asking "how was this done in 2010?"
2023-07-15 12:59:54 +0200 <arahael_> Not honestly trying to do the 2023 MonadState in 2010, more wondering how perhaps a simpler one was done instead.
2023-07-15 13:00:19 +0200 <ncf> i don't think so
2023-07-15 13:01:00 +0200 <ncf> re dictionary passing, i guess https://okmij.org/ftp/Computation/typeclass.html
2023-07-15 13:01:29 +0200 <ncf> and by monomorphising the state i mean like class MonadStateFoo m where state :: (Foo -> (a, Foo)) -> m a
2023-07-15 13:01:42 +0200 <ncf> a separate class for each state type
2023-07-15 13:03:22 +0200 <arahael_> Ah, that makes sense. Was that how it was done in 2010, though?
2023-07-15 13:04:46 +0200 <ncf> looks like mtl 1.0 already uses MultiParamTypeClasses, FunctionalDependencies
2023-07-15 13:05:02 +0200 <ncf> so you would just not use mtl in haskell 2010
2023-07-15 13:06:34 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 13:07:56 +0200tremon(~tremon@83.80.159.219)
2023-07-15 13:08:16 +0200 <arahael_> Yeah I'm implementing my own State monad, though, so no mtl at all.
2023-07-15 13:11:10 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 13:12:50 +0200buckwheatsuperpo(~buckwheat@209.122.211.192)
2023-07-15 13:19:10 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8)
2023-07-15 13:20:36 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2023-07-15 13:22:45 +0200 <arahael_> Well, I'm off to bed. :) Take care, ncf!
2023-07-15 13:23:05 +0200L29Ah(~L29Ah@wikipedia/L29Ah)
2023-07-15 13:25:05 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 13:29:56 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.1)
2023-07-15 13:35:52 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 272 seconds)
2023-07-15 13:40:44 +0200Raito_Bezarius(~Raito@wireguard/tunneler/raito-bezarius)
2023-07-15 13:42:50 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 13:44:53 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 13:47:54 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 13:49:07 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 13:49:36 +0200L29Ah(~L29Ah@wikipedia/L29Ah) ()
2023-07-15 13:59:51 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-07-15 14:02:43 +0200fweht(uid404746@id-404746.lymington.irccloud.com)
2023-07-15 14:05:42 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-07-15 14:10:26 +0200arahael_(~arahael@124-149-31-4.dyn.iinet.net.au) (Ping timeout: 245 seconds)
2023-07-15 14:16:12 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 245 seconds)
2023-07-15 14:18:03 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-07-15 14:21:26 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b)
2023-07-15 14:23:09 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 14:25:26 +0200pavonia(~user@user/siracusa) (Quit: Bye!)
2023-07-15 14:29:36 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de) (Ping timeout: 245 seconds)
2023-07-15 14:30:52 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-07-15 14:35:16 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf) (Remote host closed the connection)
2023-07-15 14:35:24 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 272 seconds)
2023-07-15 14:36:34 +0200ezzieyguywuf(~Unknown@user/ezzieyguywuf)
2023-07-15 14:38:38 +0200notzmv(~zmv@user/notzmv) (Ping timeout: 260 seconds)
2023-07-15 14:39:50 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 14:41:44 +0200nick3(~nick@2600:8807:9084:7800:8973:eff0:2771:c97b) (Ping timeout: 246 seconds)
2023-07-15 14:48:44 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de)
2023-07-15 14:55:56 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de) (Ping timeout: 246 seconds)
2023-07-15 15:03:40 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 15:07:31 +0200connrs(~connrs@user/connrs) (Read error: Connection reset by peer)
2023-07-15 15:07:52 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 15:08:14 +0200connrs(~connrs@user/connrs)
2023-07-15 15:10:46 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 15:15:59 +0200jrm(~jrm@user/jrm) (Read error: Connection reset by peer)
2023-07-15 15:16:04 +0200jrm2(~jrm@user/jrm)
2023-07-15 15:17:21 +0200jrm2jrm
2023-07-15 15:18:32 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 15:20:25 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 240 seconds)
2023-07-15 15:23:32 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 272 seconds)
2023-07-15 15:26:48 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 15:28:36 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 15:39:51 +0200aslni0x(uid601037@id-601037.hampstead.irccloud.com)
2023-07-15 15:41:59 +0200ddellacosta(~ddellacos@143.244.47.100)
2023-07-15 15:44:17 +0200aslni0x(uid601037@id-601037.hampstead.irccloud.com) ()
2023-07-15 15:46:29 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 15:49:54 +0200L29Ah(~L29Ah@wikipedia/L29Ah)
2023-07-15 15:50:41 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 15:52:38 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-07-15 15:59:25 +0200sm[i](~sm@024-165-041-186.res.spectrum.com)
2023-07-15 16:00:04 +0200sm[i](~sm@024-165-041-186.res.spectrum.com) (Client Quit)
2023-07-15 16:00:36 +0200bontaq(~user@ool-45779b84.dyn.optonline.net)
2023-07-15 16:01:41 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 245 seconds)
2023-07-15 16:04:52 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 16:07:12 +0200shapr(~user@2600:1700:c640:3100:4f0f:f85d:8c2f:2e77)
2023-07-15 16:08:11 +0200 <ncf> is there a better way to do parallel (map (timeout t) l) ?
2023-07-15 16:08:37 +0200 <ncf> the goal being [IO a] -> IO [Maybe a]
2023-07-15 16:08:50 +0200 <ncf> i feel like it's a shame to have `length l` timeouts when there's really just noe
2023-07-15 16:08:51 +0200 <ncf> one*
2023-07-15 16:21:06 +0200 <jade[m]> can't you just `timeout t >> parallel l`? what am I missing here?
2023-07-15 16:21:35 +0200 <jade[m]> wait, bad types one sec
2023-07-15 16:22:09 +0200 <jade[m]> ok I see the issue
2023-07-15 16:22:16 +0200Pickchea(~private@user/pickchea)
2023-07-15 16:22:31 +0200titibandit(~titibandi@user/titibandit) (Ping timeout: 245 seconds)
2023-07-15 16:23:53 +0200Pickchea(~private@user/pickchea) (Remote host closed the connection)
2023-07-15 16:24:53 +0200marinelli[m](~marinelli@2001:470:69fc:105::2d8) (Remote host closed the connection)
2023-07-15 16:25:15 +0200 <jade[m]> fmap sequence $ timeout t (parallel l) does this work?
2023-07-15 16:25:48 +0200 <jade[m]> no that's backwards
2023-07-15 16:27:35 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 264 seconds)
2023-07-15 16:31:38 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net)
2023-07-15 16:31:56 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 16:47:19 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 16:51:35 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 16:53:47 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 16:54:28 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-07-15 16:55:57 +0200razetime(~quassel@117.193.0.33)
2023-07-15 16:59:17 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 17:05:22 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7)
2023-07-15 17:09:19 +0200 <c_wraith> ncf: if there's only one timeout, that type looks wrong. It should be [IO a] -> IO (Maybe [a]), if I'm understanding what you're asking for.
2023-07-15 17:09:38 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 250 seconds)
2023-07-15 17:10:18 +0200 <ncf> when the timeout expires, i want to collect the threads that succeeded into Just and the ones that timed out into Nothing
2023-07-15 17:13:08 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 17:14:13 +0200ub1(~Thunderbi@91.141.79.172.wireless.dyn.drei.com)
2023-07-15 17:14:39 +0200ubert1(~Thunderbi@91.141.79.172.wireless.dyn.drei.com)
2023-07-15 17:14:41 +0200 <c_wraith> Oh. I guess you can do that with STM, but you'll sort of need to rewrite a bunch of stuff by hand
2023-07-15 17:15:42 +0200ub(~Thunderbi@178.165.175.35.wireless.dyn.drei.com) (Ping timeout: 250 seconds)
2023-07-15 17:15:42 +0200 <c_wraith> Having a bunch of calls to timeout seems easier to deal with unless you really are seeing problems from the number of threads timeout is creating
2023-07-15 17:16:30 +0200ub1ub
2023-07-15 17:16:54 +0200ubert(~Thunderbi@178.165.175.35.wireless.dyn.drei.com) (Ping timeout: 272 seconds)
2023-07-15 17:16:54 +0200ububert
2023-07-15 17:17:24 +0200 <ncf> that's what i thought
2023-07-15 17:20:18 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 17:22:08 +0200Pickchea(~private@user/pickchea)
2023-07-15 17:25:42 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 260 seconds)
2023-07-15 17:30:17 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 17:30:59 +0200eggplantade(~Eggplanta@2600:1700:38c5:d800:708b:7aa2:8b48:d8a9)
2023-07-15 17:36:18 +0200Midjak(~Midjak@82.66.147.146)
2023-07-15 17:37:16 +0200CrunchyFlakes(~pi4@ip5f5b4693.dynamic.kabel-deutschland.de)
2023-07-15 17:39:06 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 250 seconds)
2023-07-15 17:43:19 +0200 <glguy> ncf: I don't know that it's better, but you could use the async package, make a bunch of asyncs, wait on a single timer, and then `traverse \a -> cancel a >> waitCatch a`
2023-07-15 17:44:46 +0200son0p(~ff@181.136.122.143) (Ping timeout: 272 seconds)
2023-07-15 17:45:04 +0200segfaultfizzbuzz(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 17:45:20 +0200 <ncf> yeah
2023-07-15 17:48:01 +0200 <glguy> actually, without being clever that would potentially make you wait the full time even when all the events are completed
2023-07-15 17:48:09 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 17:53:00 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 17:57:34 +0200yinzzz
2023-07-15 17:58:37 +0200rustisafungus(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 18:00:08 +0200Square(~Square@user/square)
2023-07-15 18:00:10 +0200 <c_wraith> I was just looking through the async package. It's a lot of work to be exception-safe if you use the low-level interface.
2023-07-15 18:00:22 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 18:01:12 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c) (Quit: WeeChat 4.0.1)
2023-07-15 18:02:18 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-07-15 18:03:08 +0200rustisafungus(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 272 seconds)
2023-07-15 18:06:12 +0200waleee(~waleee@2001:9b0:21c:4000:5bf9:6515:c030:57b7) (Ping timeout: 245 seconds)
2023-07-15 18:13:16 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 272 seconds)
2023-07-15 18:16:22 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-07-15 18:17:24 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 18:18:39 +0200danza(~francesco@151.47.224.47)
2023-07-15 18:21:44 +0200danza(~francesco@151.47.224.47) (Read error: Connection reset by peer)
2023-07-15 18:26:47 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 18:29:39 +0200falafel(~falafel@2603-7000-a700-8710-60e1-6355-aaa7-4770.res6.spectrum.com)
2023-07-15 18:31:38 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 18:37:16 +0200shriekingnoise(~shrieking@186.137.175.87)
2023-07-15 18:37:41 +0200pickleju1ce(~root@172.56.217.200)
2023-07-15 18:41:25 +0200picklejuice(~root@c-73-196-164-60.hsd1.nj.comcast.net) (Ping timeout: 240 seconds)
2023-07-15 18:49:45 +0200mbuf(~Shakthi@49.207.178.186) (Quit: Leaving)
2023-07-15 18:49:55 +0200rustisafungus(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 18:53:48 +0200kimiamania6(~681cf57f@user/kimiamania) (Ping timeout: 272 seconds)
2023-07-15 18:54:10 +0200rustisafungus(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 252 seconds)
2023-07-15 18:54:37 +0200kimiamania6(~681cf57f@user/kimiamania)
2023-07-15 18:59:11 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 19:02:11 +0200fweht(uid404746@id-404746.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2023-07-15 19:02:14 +0200sm[i](~sm@024-165-041-186.res.spectrum.com)
2023-07-15 19:04:04 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-07-15 19:04:25 +0200ss4(~wootehfoo@user/wootehfoot)
2023-07-15 19:05:12 +0200ss4(~wootehfoo@user/wootehfoot) (Client Quit)
2023-07-15 19:05:20 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 250 seconds)
2023-07-15 19:17:25 +0200bratwurst(~dfadsva@2604:3d09:207f:f650::c680)
2023-07-15 19:17:32 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 19:20:00 +0200tzh(~tzh@c-24-21-73-154.hsd1.or.comcast.net)
2023-07-15 19:20:04 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 19:20:23 +0200glider_glider
2023-07-15 19:21:06 +0200econo_(uid147250@id-147250.tinside.irccloud.com)
2023-07-15 19:22:12 +0200Natch(~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se) (Remote host closed the connection)
2023-07-15 19:23:15 +0200rustisafungus(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net)
2023-07-15 19:23:15 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-07-15 19:24:42 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
2023-07-15 19:24:50 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 250 seconds)
2023-07-15 19:27:26 +0200rustisafungus(~segfaultf@23-93-74-212.fiber.dynamic.sonic.net) (Ping timeout: 250 seconds)
2023-07-15 19:28:36 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de)
2023-07-15 19:29:16 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 272 seconds)
2023-07-15 19:33:27 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 19:33:27 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 19:33:28 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 19:33:46 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 19:34:20 +0200euandreh(~Thunderbi@189.6.18.7) (Ping timeout: 272 seconds)
2023-07-15 19:38:14 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 19:38:30 +0200euandreh(~Thunderbi@189.6.18.7)
2023-07-15 19:39:39 +0200Inst__(~Inst@2601:6c4:4081:2fc0:d87:979c:1a0c:2c8c) (Ping timeout: 246 seconds)
2023-07-15 19:39:55 +0200jmdaemon(~jmdaemon@user/jmdaemon)
2023-07-15 19:43:34 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67)
2023-07-15 19:44:00 +0200ripspin(~chatzilla@1.145.169.115)
2023-07-15 19:44:36 +0200Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2023-07-15 19:45:10 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 19:46:42 +0200azr4e1(~azr4e1@2a00:23c7:9cbc:3401:45fb:9c68:12fe:262b)
2023-07-15 19:47:17 +0200wroathe(~wroathe@50.205.197.50)
2023-07-15 19:47:18 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2023-07-15 19:47:18 +0200wroathe(~wroathe@user/wroathe)
2023-07-15 19:52:32 +0200Natch(~natch@c-9e07225c.038-60-73746f7.bbcust.telenor.se)
2023-07-15 19:53:24 +0200pyooque(~puke@user/puke)
2023-07-15 19:53:24 +0200pukeGuest208
2023-07-15 19:53:24 +0200Guest208(~puke@user/puke) (Killed (zirconium.libera.chat (Nickname regained by services)))
2023-07-15 19:53:24 +0200pyooquepuke
2023-07-15 19:53:49 +0200son0p(~ff@181.136.122.143)
2023-07-15 19:54:16 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-07-15 20:00:39 +0200anderson(~anderson@user/anderson) (Quit: bye)
2023-07-15 20:00:39 +0200glider(~glider@user/glider) (Quit: ZNC - https://znc.in)
2023-07-15 20:03:26 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 20:03:44 +0200mechap(~mechap@user/mechap) (Ping timeout: 246 seconds)
2023-07-15 20:04:31 +0200sm[i](~sm@024-165-041-186.res.spectrum.com) (Quit: sm[i])
2023-07-15 20:04:45 +0200mechap(~mechap@user/mechap)
2023-07-15 20:08:09 +0200titibandit(~titibandi@user/titibandit)
2023-07-15 20:09:10 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net) (Ping timeout: 272 seconds)
2023-07-15 20:13:42 +0200azr4e1(~azr4e1@2a00:23c7:9cbc:3401:45fb:9c68:12fe:262b) (Ping timeout: 260 seconds)
2023-07-15 20:14:23 +0200anderson(~anderson@user/anderson)
2023-07-15 20:15:03 +0200ss4(~wootehfoo@user/wootehfoot)
2023-07-15 20:16:16 +0200dhil(~dhil@78.45.150.83.ewm.ftth.as8758.net) (Ping timeout: 245 seconds)
2023-07-15 20:16:55 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Ping timeout: 240 seconds)
2023-07-15 20:20:54 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 20:21:46 +0200gnalzo(~gnalzo@2a01:e0a:498:fd50:fcc6:bb5d:489a:ce8c)
2023-07-15 20:23:30 +0200glider(~glider@user/glider)
2023-07-15 20:24:48 +0200razetime(~quassel@117.193.0.33) (Remote host closed the connection)
2023-07-15 20:25:22 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 245 seconds)
2023-07-15 20:25:35 +0200ripspin(~chatzilla@1.145.169.115) (Remote host closed the connection)
2023-07-15 20:27:09 +0200sm[i](~sm@024-165-041-186.res.spectrum.com)
2023-07-15 20:32:16 +0200trev(~trev@user/trev) (Quit: trev)
2023-07-15 20:36:50 +0200ss4(~wootehfoo@user/wootehfoot) (Ping timeout: 252 seconds)
2023-07-15 20:39:18 +0200alexbiehl(~alexbiehl@77.20.253.164)
2023-07-15 20:39:46 +0200[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2023-07-15 20:40:50 +0200falafel(~falafel@2603-7000-a700-8710-60e1-6355-aaa7-4770.res6.spectrum.com) (Ping timeout: 272 seconds)
2023-07-15 20:45:19 +0200ss4(~wootehfoo@user/wootehfoot)
2023-07-15 20:46:39 +0200falafel(~falafel@2603-7000-a700-8710-210a-6c97-c559-5652.res6.spectrum.com)
2023-07-15 20:49:47 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 264 seconds)
2023-07-15 20:58:45 +0200alexbiehl(~alexbiehl@77.20.253.164) (Ping timeout: 246 seconds)
2023-07-15 20:59:30 +0200azr4e1(~azr4e1@host31-54-162-131.range31-54.btcentralplus.com)
2023-07-15 21:03:53 +0200Ashkan(~Ashkan@a119011.upc-a.chello.nl)
2023-07-15 21:04:47 +0200Sgeo(~Sgeo@user/sgeo)
2023-07-15 21:07:17 +0200 <Ashkan> Hi people
2023-07-15 21:07:17 +0200 <Ashkan> Looking for a c-like array in Haskell but got really confused by all the different Array types. If I'm understanding things correctly then closest is `UArray` but it supports only a handful of basic types. I'm looking for something that can hold a user defined type (a `data ... = ... | ... | ...` kind of type).
2023-07-15 21:08:18 +0200 <Clint> what do you mean by c-like in this case?
2023-07-15 21:08:43 +0200 <Ashkan> As I was typing this it occurred to me that perhaps I think Array because I'm coming from an imperative background. Perhaps better if I describe what I want and maybe something better comes to mind ...
2023-07-15 21:09:23 +0200 <jade[m]> you may want Array Int
2023-07-15 21:09:28 +0200 <Ashkan> Hi Clint :) I'm keeping the state of a grid-based game. Its a square matrix with all the cells having some value all the time
2023-07-15 21:09:28 +0200 <geekosaur> you've also missed that Vector is more often used than Array these days, and supports user defined types including unboxed types via Storable
2023-07-15 21:09:33 +0200 <jade[m]> it's an array indexed by integers
2023-07-15 21:09:49 +0200 <jade[m]> Ashkan: ah then you might want `Array (Int, Int)`
2023-07-15 21:09:55 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 21:09:55 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 21:09:56 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 21:10:02 +0200 <Ashkan> I need a way to draw it per frame so I need to be able to pass through all the elements (cover the whole grid) in order from 0 to last element pretty fast
2023-07-15 21:10:43 +0200 <geekosaur> Array's big advantage is that anything you can define Ix for can be an index, whereas Vector only allows Ints
2023-07-15 21:10:53 +0200 <jade[m]> another option for this kind of thing is `(Int, Int) -> a`
2023-07-15 21:11:01 +0200 <c_wraith> I'm not sure a Storable Vector is going to be faster than a boxed vector. Storable sort of makes every field access indirect.
2023-07-15 21:11:04 +0200 <Ashkan> And I need to be able to update it quite fast as well as in `update arr x y newVal` and also when mouse moves over a certain cell (an `x y`) I need the value in there , fast.
2023-07-15 21:11:13 +0200 <geekosaur> true
2023-07-15 21:12:20 +0200 <c_wraith> If you really need maximal speed, I'd be looking at an unboxed vector for each field, like in Struct of Arrays representation.
2023-07-15 21:12:30 +0200 <jade[m]> jade[m]: this has the advantage that you can easily "mask" it, but a lot of changes would have stack space
2023-07-15 21:12:53 +0200 <jade[m]> s/stack space/stack space buildup
2023-07-15 21:13:58 +0200 <Ashkan> My understanding is that I need something that is : 1) strict and 2) keep values adjacent to each other in memory with a very basic relationship between their index in the "array" and their memory address --> exactly C-array. What is the closest thing in Haskell ?
2023-07-15 21:14:13 +0200ss4(~wootehfoo@user/wootehfoot) (Quit: Leaving)
2023-07-15 21:14:16 +0200 <c_wraith> an unboxed array/vector
2023-07-15 21:14:31 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-07-15 21:15:34 +0200 <Ashkan> Okay, though myself as well ... but ... does "unboxed" automatically means I'm then limited to `Int16` , `int32` etc ? not sure what's their proper name. Primitive types ?
2023-07-15 21:15:52 +0200 <c_wraith> Well, that's where Struct of Arrays representation comes in
2023-07-15 21:16:01 +0200 <c_wraith> It's a very common optimization in C
2023-07-15 21:16:31 +0200 <c_wraith> (for this specific use case)
2023-07-15 21:17:00 +0200 <Ashkan> (I really don't care much about indexing it via fancy custom types and such, performance characteristics are the key here).
2023-07-15 21:17:21 +0200 <c_wraith> Ashkan: https://en.wikipedia.org/wiki/AoS_and_SoA
2023-07-15 21:17:48 +0200azr4e1(~azr4e1@host31-54-162-131.range31-54.btcentralplus.com) (Quit: azr4e1)
2023-07-15 21:17:56 +0200sm[i](~sm@024-165-041-186.res.spectrum.com) (Quit: sm[i])
2023-07-15 21:18:15 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de) (Read error: Connection reset by peer)
2023-07-15 21:18:26 +0200michalz(~michalz@185.246.207.218)
2023-07-15 21:18:26 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 21:19:18 +0200 <c_wraith> If you really want, you can create your own Unboxed Vector data instances - it's a data family after all.
2023-07-15 21:20:12 +0200 <monochrom> As an example, as the doc points out, unboxed vector of complex numbers simply means two unboxed vectors of real numbers.
2023-07-15 21:20:13 +0200dibblego(~dibblego@haskell/developer/dibblego) (Quit: λ)
2023-07-15 21:22:48 +0200 <Ashkan> Okay, let me ask this way: imagine you are model the Mine Sweeper game with a N x N board. Every single cell has a known state and you need to draw the whole field 30 times per second, be able to quickly tell what is in cell (C, R) and quickly update the cell in (C,R) with a new value.
2023-07-15 21:22:48 +0200 <Ashkan> Each cell is either: uncovered, has a number (from 1 to 8 ) or flagged by the player as "mine".
2023-07-15 21:22:49 +0200 <Ashkan> How do you model this in Haskell ?
2023-07-15 21:23:14 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 21:23:39 +0200 <c_wraith> 30 times per second for a minesweeper board?
2023-07-15 21:23:41 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-07-15 21:23:42 +0200 <c_wraith> I thought you said fast
2023-07-15 21:24:10 +0200 <c_wraith> Immutable arrays of boxed values would be fast enough for a minesweeper game at 30Hz
2023-07-15 21:24:17 +0200 <monochrom> Perhaps it's a 1600x1000 board :)
2023-07-15 21:25:55 +0200 <Ashkan> Maybe I don't understand how boxing works. My understanding is then every cell is re-evaluated every single time it is accessed. No ?
2023-07-15 21:26:16 +0200 <[exa]> Ashkan: no
2023-07-15 21:26:29 +0200 <[exa]> Ashkan: do you know what are pointers? (in C, etc.)
2023-07-15 21:26:30 +0200 <Ashkan> As if it was `IO Cell` instead of just `Cell`
2023-07-15 21:26:37 +0200 <jade[m]> no
2023-07-15 21:26:46 +0200 <monochrom> But it is not IO Cell.
2023-07-15 21:26:59 +0200 <Ashkan> I know pointers, yes
2023-07-15 21:28:06 +0200 <[exa]> Ashkan: very briefly boxing is just putting something in a structure that may act slighly polymorphic (it may contain something unevaluated or it may contain it already evaluated), and as the main performance "problem" this typically needs to be behind a pointer because the sizes of the things differ
2023-07-15 21:28:20 +0200 <[exa]> Ashkan: despite of that the "unevaluated" thing gets only evaluated once
2023-07-15 21:29:03 +0200 <Ashkan> Alright, so unless it "changes", once evaluated then there is no cost later
2023-07-15 21:29:31 +0200 <[exa]> once evaluated it can't be changed, the greatest danger there is that you basically generate the unevaluated cell again
2023-07-15 21:29:36 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 21:29:36 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 21:29:36 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 21:29:46 +0200 <Ashkan> But still holds these "pointers" to either the code or the computed value instead of storing the values directly and only. Correct ?
2023-07-15 21:30:02 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker) (Ping timeout: 246 seconds)
2023-07-15 21:30:32 +0200 <[exa]> yeah unless you go for Data.Vector or explicitly say that stuff needs to be unboxed, the default is to be very pointy
2023-07-15 21:30:50 +0200 <Ashkan> The value can't be changed but the cell in the array can be updated. Putting another "pointer" in there.
2023-07-15 21:31:04 +0200 <[exa]> no, all data is immutable
2023-07-15 21:31:09 +0200 <c_wraith> but a minesweeper board is just not big enough for a couple levels of indirection to matter
2023-07-15 21:31:28 +0200 <[exa]> Ashkan: check out Data.Vector.Mutable which allows serializing the updates
2023-07-15 21:32:13 +0200 <c_wraith> I thought you meant like mesh vertices where you might have 50k in the view frustrum at once.
2023-07-15 21:32:20 +0200 <[exa]> Ashkan: (updates in "pure" code do not make sense for several interesting reasons, and the inability to guess the "order" of updates is one of the less painful ones)
2023-07-15 21:33:22 +0200 <Ashkan> I understand it is immutable but the update-y functions returning the modified version of the data should somehow make the update take effect. Best they can do is to make a (cheap) copy or whatever fucntional-data-structure black magic + the new value. Maybe I'm overthinking this !
2023-07-15 21:33:24 +0200ubert(~Thunderbi@91.141.79.172.wireless.dyn.drei.com) (Quit: ubert)
2023-07-15 21:33:24 +0200ubert1ubert
2023-07-15 21:33:51 +0200 <[exa]> Ashkan: anyway to be honest, haskell pointy structs are still much less ugly than the typical stuff that you can find in python and javas; and there are funny tricks to maintain cache efficiency... I wouldn't be worried about performance until you go literally to hundreds of thousands of fields (or make it of lists)
2023-07-15 21:34:10 +0200 <[exa]> Ashkan: yeah the update in Data.Vector does copy-on-write
2023-07-15 21:34:34 +0200 <[exa]> Ashkan: which is pretty expensive if you do the updates manually by field but there are nice functions that can very easily pool multiple updates
2023-07-15 21:34:46 +0200 <[exa]> Ashkan: for which reason the Data.Vector.Mutable is usually not required
2023-07-15 21:35:02 +0200 <monochrom> I wonder if "minesweeper" is just a proxy example, and the real one is like "lattice QCD".
2023-07-15 21:35:35 +0200 <[exa]> (Ashkan: interesting outcome of laziness: the "mass update" functions take lists of updates, but the lists of updates are typically never allocated because they act as "generators" and the thing gets pretty efficient)
2023-07-15 21:35:39 +0200 <monochrom> "lattice QCD for modeling the next generation of hydrogen fusion" :)
2023-07-15 21:35:45 +0200 <Ashkan> The actual project is a mine sweeper. I'm not sure you say boxing is no problem for this. Not that I disagree with you but rather I have zero clue/heuristics to make that observation. For all I know from the docs this boxing business could take anywhere from 0 to few hundred milli seconds
2023-07-15 21:36:18 +0200 <[exa]> Ashkan: if you know C++, the shared_ptr typically has a higher overhead than the box :]
2023-07-15 21:37:44 +0200 <[exa]> (even the unique_ptr is sometimes more expensive, because the corresponding malloc/free is often way slower than the haskell allocator)
2023-07-15 21:37:48 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 21:37:50 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 272 seconds)
2023-07-15 21:38:09 +0200 <Ashkan> @monochrom hehe I wish. Honestly just a simple mine-sweeper
2023-07-15 21:38:09 +0200 <lambdabot> Unknown command, try @list
2023-07-15 21:38:27 +0200 <[exa]> Ashkan: what do you plan to use for the graphics drawing btw?
2023-07-15 21:38:37 +0200Inst(~Inst@2601:6c4:4081:2fc0:2cd7:faf6:2df3:acfa)
2023-07-15 21:39:10 +0200 <Ashkan> Glad you asked ! tried every single !@#$ thing out there on Haskell. Turns out for my rather humble purposes of teaching myself Haskell, `gloss` is the best
2023-07-15 21:39:40 +0200 <[exa]> ok good I just kinda wanted to recommend gloss in case you were not planning to do so. :D
2023-07-15 21:39:41 +0200 <jade[m]> gloss is nice for small games and applications
2023-07-15 21:39:57 +0200 <jade[m]> I tried some direct opengl stuff but it's really stupid most of the time
2023-07-15 21:39:58 +0200 <Ashkan> I'm trying to teach myself to think functionally. Games are a very good combination of a few things I wish to learn to model functionally.
2023-07-15 21:40:04 +0200 <[exa]> if you like terminals, try brick, it's similarly cool
2023-07-15 21:40:43 +0200 <[exa]> Ashkan: feel free to paste the code here once it works, we love to nitpic^H^H^H^H^H^H improve people's code
2023-07-15 21:40:52 +0200 <Ashkan> Atm I'm having the most difficulty convincing myself that an immutable model can actually keep up with a game !
2023-07-15 21:41:04 +0200 <[exa]> totally
2023-07-15 21:41:13 +0200 <[exa]> also you're not going to update it every frame, right?
2023-07-15 21:41:49 +0200 <jade[m]> Ashkan: it allows for so much magic in the background that you rarely realize it on the surface
2023-07-15 21:41:56 +0200 <Ashkan> I can't see how that can be :-/ too much imperative thinking maybe. Like the mine sweeper for example. Can't understand how a boxed, immutable data structure can hold the game state
2023-07-15 21:42:37 +0200 <[exa]> Ashkan: simply don't mutate it, just replace it with a new one
2023-07-15 21:42:38 +0200 <Ashkan> maybe for a simple thing like minesweeper it can but you get the point. Imagine a more complicated game with millions of state elements
2023-07-15 21:42:56 +0200 <jade[m]> Ashkan: from my own experience games are some of the hardest things to model functionally - I had a lot easier time learning FP thinking from mathy applications/things that did lots of computation but had a small Ui
2023-07-15 21:43:10 +0200dcoutts(~duncan@cpc69402-oxfd27-2-0-cust903.4-3.cable.virginm.net)
2023-07-15 21:43:27 +0200 <int-e> Ashkan: Yes, at some point you have to worry about the cost of immutability. But not for Minesweeper.
2023-07-15 21:43:31 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 21:43:32 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 21:43:32 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 21:44:32 +0200 <Ashkan> jade[m] Oh I did that trick on my mind already. Happy and all shiny until someone challenged me to a "real-world" problem then suddenly FP started to suck big time :D but I'm sure it's rather my incompetence.
2023-07-15 21:44:44 +0200 <[exa]> Ashkan: btw I was giving this to students for starters, https://github.com/exaexa/hs19/tree/master/u1/ , might help.
2023-07-15 21:45:17 +0200 <geekosaur> did anyone mention asking questions like this in #haskell-game?
2023-07-15 21:45:18 +0200azimut_(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 240 seconds)
2023-07-15 21:45:48 +0200 <jade[m]> Ashkan: Oh yeah I had that period too, but it's moreso that real world applications (in all languages) require a lot more thought and planning than small toy examples
2023-07-15 21:45:52 +0200 <int-e> Worrying about mutability seems generic enough.
2023-07-15 21:46:16 +0200 <jade[m]> haskell is just as capable as any other languages when it comes to big real world projects (look at GHC for example)
2023-07-15 21:46:19 +0200 <Ashkan> mutability + strictness
2023-07-15 21:46:56 +0200 <Ashkan> I am indeed very impressed by GHC
2023-07-15 21:47:24 +0200 <Ashkan> But to be fair, compilers are like *the* use case for FP
2023-07-15 21:47:39 +0200 <jade[m]> oh yeah
2023-07-15 21:47:46 +0200 <jade[m]> but haskell is truly general purpose
2023-07-15 21:47:58 +0200 <jade[m]> it just takes a while to get good at it
2023-07-15 21:48:04 +0200 <jade[m]> (im a far far way from that]
2023-07-15 21:48:10 +0200 <jade[m]> s/]/)
2023-07-15 21:48:11 +0200 <Ashkan> I would say a game, a word processor or an email server for example are where you can show if you got what it takes for industrial strength. You get my meaning.
2023-07-15 21:48:17 +0200 <claro> what is a while?
2023-07-15 21:48:25 +0200 <[exa]> Ashkan: re mutability in games I was usually doing it this way: I store everything in immutable vectors. Then if there's an algorithm that needs to do tiny updates on the vector multiple times (which would be inefficient), I thaw it to mutable vector, do it within some small contained "imperative" environment (ST monad etc), and then freeze it back to immutable to keep the program pure. Refs:
2023-07-15 21:48:31 +0200 <[exa]> https://hackage.haskell.org/package/vector-0.13.0.0/docs/Data-Vector.html#v:freeze
2023-07-15 21:48:34 +0200 <jade[m]> claro: many years
2023-07-15 21:48:34 +0200Pickchea(~private@user/pickchea)
2023-07-15 21:48:40 +0200gurkenglas(~gurkengla@dynamic-046-114-182-179.46.114.pool.telefonica.de)
2023-07-15 21:48:44 +0200wootehfoot(~wootehfoo@user/wootehfoot) (Read error: Connection reset by peer)
2023-07-15 21:48:51 +0200 <claro> skill issue
2023-07-15 21:49:28 +0200 <jade[m]> damn
2023-07-15 21:49:51 +0200 <Hecate> you can replace the many years by day-to-day practice with other people
2023-07-15 21:50:15 +0200 <[exa]> +1 ^
2023-07-15 21:50:34 +0200 <int-e> . o O ( as long as you keep it up for many years )
2023-07-15 21:50:36 +0200 <[exa]> skipping unsolvable issues by asking on #haskell: top.
2023-07-15 21:50:36 +0200 <Ashkan> All right guys thank you all for your time and effort. I got a few links to read and I have a feeling I'm missing some subtle points about how functional data structures work. I'll be back with hopefully better questions.
2023-07-15 21:50:58 +0200 <[exa]> Ashkan: btw I recommend thinking about how gloss draws the "scene structure"
2023-07-15 21:51:16 +0200 <[exa]> Ashkan: spoiler: it typically never really gets allocated
2023-07-15 21:51:17 +0200 <monochrom> The opposing view is that if C is great for email server then let email servers be written in C. "Industry" is diverse and there are other sectors for Haskell.
2023-07-15 21:51:37 +0200bratwurst(~dfadsva@2604:3d09:207f:f650::c680) (Remote host closed the connection)
2023-07-15 21:51:43 +0200 <davean> Has C ever been good for email servers? It seems all the email servers in C are disasters
2023-07-15 21:51:55 +0200bratwurst(~dfadsva@2604:3d09:207f:f650::c680)
2023-07-15 21:52:00 +0200 <int-e> ...better than Fortran or Pascal...
2023-07-15 21:52:05 +0200 <monochrom> Yeah it's a hypothetical. While we're hypothetical.
2023-07-15 21:52:11 +0200 <[exa]> yeah like, most email servers are in C somehow :D
2023-07-15 21:52:33 +0200 <int-e> I mean, most email servers are old?
2023-07-15 21:52:45 +0200 <[exa]> yeah that likely contributes
2023-07-15 21:52:55 +0200 <monochrom> Most email servers still have vulnerabilities because of C. <duck>
2023-07-15 21:53:04 +0200 <[exa]> "most OSS mail servers", that would be it.
2023-07-15 21:53:06 +0200 <davean> monochrom: I mean thats half of what makes most of them terrible
2023-07-15 21:53:25 +0200 <davean> Issues with config and handling config complexity without issues is the other half
2023-07-15 21:53:25 +0200 <[exa]> but c'mon it could have been java
2023-07-15 21:53:25 +0200 <int-e> . o O ( and Exchange )
2023-07-15 21:53:36 +0200 <davean> [exa]: what about Java? That would probably be fine?
2023-07-15 21:53:43 +0200 <davean> Probably better than C
2023-07-15 21:54:36 +0200 <davean> I feel like Haskell could maybe win on the config side, but really thats a programmer issue and C just makes that programming hard.
2023-07-15 21:54:38 +0200 <[exa]> well I had the opportunity to administer one back in the old days like 2010
2023-07-15 21:54:41 +0200 <davean> The security side litterly anything else wins
2023-07-15 21:54:45 +0200 <monochrom> Whenever my students make array-index-out-of-bound mistakes, they probably like C more than Java.
2023-07-15 21:54:46 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 250 seconds)
2023-07-15 21:54:53 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 21:54:56 +0200rainbyte(~rainbyte@181.31.239.226) (Ping timeout: 272 seconds)
2023-07-15 21:54:59 +0200 <davean> monochrom: oh?
2023-07-15 21:55:01 +0200 <[exa]> lol.
2023-07-15 21:55:24 +0200 <monochrom> Students always want to pretend that their programs run fine, right?
2023-07-15 21:55:30 +0200 <davean> No?
2023-07-15 21:55:35 +0200 <monochrom> yes?
2023-07-15 21:55:39 +0200 <davean> Not my experience
2023-07-15 21:55:45 +0200 <probie> C: maybe a segfault, maybe wrong data. Java: A big scary stack trace
2023-07-15 21:56:24 +0200 <davean> monochrom: I have seen more want to knwo it will run right for grading.
2023-07-15 21:56:48 +0200 <[exa]> java: OOM, grafecul shutdown, OOM again.
2023-07-15 21:57:10 +0200machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2023-07-15 21:57:27 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
2023-07-15 21:57:43 +0200 <mauke> ArrayStoreException
2023-07-15 21:57:53 +0200 <monochrom> You have more competent students.
2023-07-15 21:58:16 +0200 <probie> davean: that's why you give them some example test cases, so they can satisfy themselves it works on those (and only those) and then fails for every real test case
2023-07-15 21:58:20 +0200 <monochrom> My students operate more at the level of "my code works but it doesn't pass your test cases".
2023-07-15 21:58:33 +0200 <davean> haha, interesting!
2023-07-15 21:59:46 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 22:01:00 +0200 <davean> monochrom: my brain hurts now. Thanks.
2023-07-15 22:01:02 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl)
2023-07-15 22:05:14 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 260 seconds)
2023-07-15 22:07:11 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 22:10:46 +0200Pickchea(~private@user/pickchea) (Quit: Leaving)
2023-07-15 22:11:12 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 240 seconds)
2023-07-15 22:18:35 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 22:21:37 +0200wroathe(~wroathe@user/wroathe) (Quit: Lost terminal)
2023-07-15 22:22:52 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 240 seconds)
2023-07-15 22:25:00 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 22:26:35 +0200sm[i](~sm@024-165-041-186.res.spectrum.com)
2023-07-15 22:27:51 +0200wroathe(~wroathe@50.205.197.50)
2023-07-15 22:27:51 +0200wroathe(~wroathe@50.205.197.50) (Changing host)
2023-07-15 22:27:51 +0200wroathe(~wroathe@user/wroathe)
2023-07-15 22:29:42 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au)
2023-07-15 22:29:42 +0200dibblego(~dibblego@116-255-1-157.ip4.superloop.au) (Changing host)
2023-07-15 22:29:42 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 22:31:21 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-07-15 22:32:10 +0200zer0bitz_(~zer0bitz@user/zer0bitz)
2023-07-15 22:34:50 +0200TheCoffeMaker(~TheCoffeM@user/thecoffemaker)
2023-07-15 22:35:59 +0200zer0bitz(~zer0bitz@user/zer0bitz) (Ping timeout: 264 seconds)
2023-07-15 22:39:07 +0200dibblego(~dibblego@haskell/developer/dibblego) (Quit: λ)
2023-07-15 22:43:20 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-07-15 22:43:42 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 272 seconds)
2023-07-15 22:45:22 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 245 seconds)
2023-07-15 22:45:59 +0200wootehfoot(~wootehfoo@user/wootehfoot)
2023-07-15 22:49:56 +0200dibblego(~dibblego@116.255.1.157)
2023-07-15 22:49:56 +0200dibblego(~dibblego@116.255.1.157) (Changing host)
2023-07-15 22:49:56 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 22:51:26 +0200nick3(~nick@ip98-170-224-49.pn.at.cox.net)
2023-07-15 22:54:23 +0200Lycurgus(~juan@user/Lycurgus)
2023-07-15 22:59:41 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2023-07-15 23:00:48 +0200misterfish(~misterfis@84-53-85-146.bbserv.nl) (Ping timeout: 272 seconds)
2023-07-15 23:00:51 +0200dibblego(~dibblego@haskell/developer/dibblego) (Ping timeout: 245 seconds)
2023-07-15 23:01:59 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-07-15 23:01:59 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-07-15 23:01:59 +0200wroathe(~wroathe@user/wroathe)
2023-07-15 23:03:45 +0200harveypwca(~harveypwc@2601:246:c180:a570:3828:d8:e523:3f67) (Quit: Leaving)
2023-07-15 23:05:02 +0200tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2023-07-15 23:07:31 +0200nick3(~nick@ip98-170-224-49.pn.at.cox.net) (Ping timeout: 245 seconds)
2023-07-15 23:13:28 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 23:14:34 +0200dibblego(~dibblego@116.255.1.157)
2023-07-15 23:14:34 +0200dibblego(~dibblego@116.255.1.157) (Changing host)
2023-07-15 23:14:34 +0200dibblego(~dibblego@haskell/developer/dibblego)
2023-07-15 23:14:36 +0200Ashkan(~Ashkan@a119011.upc-a.chello.nl) (Quit: Client closed)
2023-07-15 23:17:38 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 23:18:39 +0200falafel(~falafel@2603-7000-a700-8710-210a-6c97-c559-5652.res6.spectrum.com) (Remote host closed the connection)
2023-07-15 23:21:34 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net)
2023-07-15 23:22:33 +0200_ht(~Thunderbi@28-52-174-82.ftth.glasoperator.nl) (Quit: _ht)
2023-07-15 23:25:22 +0200falafel(~falafel@2603-7000-a700-8710-cd1b-efe5-440f-7e43.res6.spectrum.com)
2023-07-15 23:25:42 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan) (Remote host closed the connection)
2023-07-15 23:25:57 +0200adanwan(~adanwan@gateway/tor-sasl/adanwan)
2023-07-15 23:26:23 +0200nate2(~nate@c-98-45-169-16.hsd1.ca.comcast.net) (Ping timeout: 246 seconds)
2023-07-15 23:26:38 +0200gmg(~user@user/gehmehgeh) (Ping timeout: 240 seconds)
2023-07-15 23:27:46 +0200gmg(~user@user/gehmehgeh)
2023-07-15 23:31:14 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332)
2023-07-15 23:33:55 +0200lambdabot(~lambdabot@haskell/bot/lambdabot) (Remote host closed the connection)
2023-07-15 23:36:02 +0200lambdabot(~lambdabot@silicon.int-e.eu)
2023-07-15 23:36:02 +0200lambdabot(~lambdabot@silicon.int-e.eu) (Changing host)
2023-07-15 23:36:02 +0200lambdabot(~lambdabot@haskell/bot/lambdabot)
2023-07-15 23:36:52 +0200nick3(~nick@ip98-170-224-49.pn.at.cox.net)
2023-07-15 23:37:33 +0200Lycurgus(~juan@user/Lycurgus) (Quit: Exeunt: personae.ai-integration.biz)
2023-07-15 23:38:57 +0200Guest6728(~finn@185.52.47.189)
2023-07-15 23:40:18 +0200takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2023-07-15 23:41:22 +0200nick3(~nick@ip98-170-224-49.pn.at.cox.net) (Ping timeout: 250 seconds)
2023-07-15 23:43:33 +0200fr33domlover(~fr33domlo@towards.vision) (Remote host closed the connection)
2023-07-15 23:44:41 +0200kupi(uid212005@id-212005.hampstead.irccloud.com)
2023-07-15 23:47:40 +0200wroathe(~wroathe@user/wroathe) (Ping timeout: 272 seconds)
2023-07-15 23:53:53 +0200alexbiehl(~alexbiehl@2a02:8108:323f:ca14:adeb:5d31:3c95:b332) (Ping timeout: 246 seconds)
2023-07-15 23:54:19 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2023-07-15 23:54:20 +0200wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2023-07-15 23:54:20 +0200wroathe(~wroathe@user/wroathe)
2023-07-15 23:54:47 +0200__monty__(~toonn@user/toonn) (Quit: leaving)