2022/11/25

2022-11-25 00:03:23 +0100merijn(~merijn@86.86.29.250) (Ping timeout: 260 seconds)
2022-11-25 00:07:55 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 265 seconds)
2022-11-25 00:20:19 +0100VOID404(~VOID404@89.151.44.90)
2022-11-25 00:20:32 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-11-25 00:21:19 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 00:23:46 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 00:26:19 +0100 <VOID404> Fellas, I have a question. I wanted to write a class and implement it, but some ways of implementing the functionality has IO in the process, which means that I will get the result with IO, which won't fulfill the class constraints. How can I design the class and implementation to accept both IO result and regular result? Is there a nice solution
2022-11-25 00:26:20 +0100 <VOID404> for that? Is this a beginner question? :P
2022-11-25 00:27:50 +0100 <monochrom> Designing your own class is never a beginner question.
2022-11-25 00:28:00 +0100 <VOID404> damn it :/
2022-11-25 00:28:40 +0100 <monochrom> Even the very decision "I think a type class makes sense" is not a beginner's decision.
2022-11-25 00:28:47 +0100 <geekosaur> haskell is not oop, do not try to approach it that way
2022-11-25 00:28:54 +0100 <monochrom> Namely, a beginner always makes the wrong decision on this.
2022-11-25 00:29:03 +0100 <monochrom> Yeah, because of that.
2022-11-25 00:29:22 +0100 <loonycyborg> type class is closer to c++ template than to c++ class
2022-11-25 00:29:40 +0100 <monochrom> No, to C++ concepts.
2022-11-25 00:30:01 +0100 <loonycyborg> Yes, basically that
2022-11-25 00:30:23 +0100 <loonycyborg> without concepts C++ templates have lot less strict "type" checking :P
2022-11-25 00:30:43 +0100opticblast(~Thunderbi@172.58.87.196)
2022-11-25 00:30:48 +0100Guest75(~Guest75@178.141.145.247) (Ping timeout: 260 seconds)
2022-11-25 00:31:18 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-25 00:32:23 +0100 <Axman6> VOID404: can you give us some more information about what you are actually trying to do? Your question is very vague and the specifics will affect the answers a lot
2022-11-25 00:32:32 +0100 <VOID404> I have a simulation with a bot. I want to generalise a bot with state. I thought I'd make a class, that does the simulated step on the bot state and simulation state, returning bots action. This way I can swap out bots easily and they can be managed by the simulation
2022-11-25 00:32:40 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 00:32:50 +0100 <VOID404> In simple cases, with bot state and simulation state as input, I can get bot action - easy
2022-11-25 00:33:28 +0100 <VOID404> But I want to be able to wrap an external implementation and communicate with it through stdin/stdout, which gives me the result wrapped in IO
2022-11-25 00:33:28 +0100 <Axman6> sounds very much like a monadic type class, but more details would be helpful
2022-11-25 00:34:18 +0100acidjnk(~acidjnk@p200300d6e7137a67f01158a637cc3bb0.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-11-25 00:36:10 +0100 <VOID404> I'd be happy to read whatever y'all would recommend me to learn how to design it better, if what I said makes no sense :P
2022-11-25 00:37:11 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Client Quit)
2022-11-25 00:37:46 +0100 <VOID404> I also didn't know how to handle initialization data, but that's a separate problem. I did "builder class" which is probably a terrible way of doing it, but at least it works until I figure out what the haskelish way of doing it is
2022-11-25 00:39:08 +0100 <VOID404> class BotBuilder a b where
2022-11-25 00:39:09 +0100 <VOID404>   init :: (Bot b) => a -> InitInput -> b
2022-11-25 00:39:09 +0100 <VOID404> class Bot a where
2022-11-25 00:39:10 +0100 <VOID404>   run :: a -> TurnInput -> BotOutput
2022-11-25 00:39:29 +0100 <Axman6> it's not particularly clear to me, not sure about others. my first instinct is to define a type class for a monadic interface: class MonadSim m where getState :: m SimState; doThing :: Arg -> m ThingResult
2022-11-25 00:39:58 +0100 <VOID404> Ok, but then what about implementations not requiring a monad?
2022-11-25 00:40:21 +0100 <Axman6> then you can have instances for which ever monads are appropriate, whether they're pure or have IO underneath
2022-11-25 00:40:37 +0100 <Axman6> just require a monad
2022-11-25 00:41:44 +0100 <oak-> Also maybe a good starting point would be to start reading about different ways to design a Haskell program?
2022-11-25 00:42:00 +0100 <Axman6> generally if you're talking about simulating something, you're talking about sequencing events, which is basically what monads are used for
2022-11-25 00:42:19 +0100 <VOID404> I am not used to declarative structures yet :/
2022-11-25 00:42:45 +0100 <Axman6> I don't know what "declarative structures" is
2022-11-25 00:43:05 +0100 <VOID404> I mean Monad, Functors etc
2022-11-25 00:43:23 +0100 <VOID404> I wrote functional code in multi-paradigm languages, but I've never seen a language with stuff like IO represented like in haskell
2022-11-25 00:43:32 +0100 <monochrom> I have never read any material on "how to design generalizations". I don't know of any anyway. How I learned to desgin generalizations: I start with not wanting to generalize. Just write out all the examples I want, low-tech, KISS. Then compare them and do refactoring. If I suspect that I am not seeing a good refactoring, I may ask others.
2022-11-25 00:43:33 +0100 <int-e> Those two classes simplify to type BotBuilder = InitInput -> Bot; type Bot = TurnInput -> BotOutput
2022-11-25 00:43:37 +0100 <Axman6> Time to start learning then :)
2022-11-25 00:45:49 +0100 <int-e> Which is okay as long as bots don't have any internal state...
2022-11-25 00:46:36 +0100 <VOID404> They *might* have, that's why I thought classes are the way to go
2022-11-25 00:46:36 +0100 <VOID404> And if I wanna wrap external implementations, then handles are the state
2022-11-25 00:47:09 +0100 <VOID404> Wait, they don't have to be, because they don't change
2022-11-25 00:47:13 +0100 <VOID404> do they
2022-11-25 00:47:13 +0100 <monochrom> "type BotBuilder = InitInput -> Bot; type Bot = TurnInput -> BotOutput" on steroid: https://www.slideshare.net/ScottWlaschin/fp-patterns-buildstufflt slide 13
2022-11-25 00:49:25 +0100 <VOID404> But BotOutput sometimes requires IO. So I guess the way to go is just wrap everything in monads, and use pure when not needed?
2022-11-25 00:49:28 +0100 <oak-> typeclasses don't actually have anything to do with mutable state, in the object-oriented programming sense
2022-11-25 00:49:58 +0100VOID404(~VOID404@89.151.44.90) (Quit: Client closed)
2022-11-25 00:50:15 +0100VOID404(~VOID404@89.151.44.90)
2022-11-25 00:50:21 +0100 <int-e> You can add in state by letting the step function return a new Bot: data Bot = Bot (TurnInput -> (Bot, BotOutput)) ...the state will be captured by the function, you don't have to make it explicit.
2022-11-25 00:50:37 +0100 <int-e> (I have not checked whether monochrom's link is doing that or something else)
2022-11-25 00:51:16 +0100 <monochrom> My link (and if you go to slide 13) just says: functions, functions, functions again, did I say functions? functions.
2022-11-25 00:51:17 +0100 <VOID404> Is returning function cleaner than state with class?..
2022-11-25 00:51:30 +0100 <int-e> monochrom: I'll take that as a yes.
2022-11-25 00:51:48 +0100 <Axman6> Just as a general piece of advice, if tyou are new to Haskell, a type class is almost never going to be the right tool for you
2022-11-25 00:52:10 +0100 <monochrom> But I guess the whole talk is of value about designs in FP.
2022-11-25 00:52:16 +0100 <monochrom> or at least in Haskell.
2022-11-25 00:52:27 +0100 <Axman6> like monochrom said, write the concrete code, keep the implementations separate, then you can think about how you abstract the common parts
2022-11-25 00:52:44 +0100caryhartline(~caryhartl@2600:1700:2d0:8d30:ec42:d12f:7ae6:7310) (Quit: caryhartline)
2022-11-25 00:53:21 +0100VOID404(~VOID404@89.151.44.90) (Client Quit)
2022-11-25 00:53:42 +0100VOID404(~VOID404@89.151.44.90)
2022-11-25 00:53:50 +0100 <VOID404> I shall stick to just functions then for now, thx <3
2022-11-25 00:54:14 +0100 <VOID404> I'll try to read something about functional design I guess
2022-11-25 00:54:47 +0100 <oak-> If I understood the problem correclty, I'd start by doing simple IO main loop, which will read input from stdin, parse it, process the simulation based on the parsed input, print the result, then read input again ...
2022-11-25 00:55:09 +0100 <oak-> if the point is to make some kind of "prompt"
2022-11-25 00:55:17 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Ping timeout: 265 seconds)
2022-11-25 00:55:29 +0100 <VOID404> the thing is that some Bots require IO and some don't
2022-11-25 00:56:10 +0100 <VOID404> I don't want to needlessly complicate the simpler Bots, but the result from IO bot has a result inside of the IO
2022-11-25 00:56:17 +0100 <VOID404> that's my main problem
2022-11-25 00:56:26 +0100 <VOID404> It is the same kind of operation, it's just the damn IO
2022-11-25 00:56:36 +0100 <VOID404> So I guess I wrap the result from simple in pure
2022-11-25 00:56:54 +0100 <VOID404> and I have to complicate it like that
2022-11-25 00:57:03 +0100chromoblob(~user@37.113.164.122) (Ping timeout: 260 seconds)
2022-11-25 00:57:26 +0100 <int-e> type IOBot = TurnInput -> IO BotOutput; botToIOBot bot turn = pure (bot turn)
2022-11-25 00:57:27 +0100VOID404(~VOID404@89.151.44.90) (Client Quit)
2022-11-25 00:57:45 +0100VOID404(~VOID404@89.151.44.90)
2022-11-25 00:57:59 +0100 <int-e> :t state
2022-11-25 00:58:00 +0100 <lambdabot> MonadState s m => (s -> (a, s)) -> m a
2022-11-25 00:58:35 +0100 <int-e> :t StateT
2022-11-25 00:58:36 +0100 <lambdabot> (s -> m (a, s)) -> StateT s m a
2022-11-25 00:58:50 +0100void_(~void@89.151.44.90)
2022-11-25 00:59:21 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 00:59:32 +0100 <int-e> There's a vague connection here, in that `state` lifts the "simple" version of the state monad to the transformer version (and, well, whatever other implementatioins MonadState has...)
2022-11-25 01:00:57 +0100Guest55(~Guest55@p200300ef9716451373d1c50d5ff22e08.dip0.t-ipconnect.de)
2022-11-25 01:02:32 +0100 <VOID404> I feel like I though I get monads more than I actually do XD
2022-11-25 01:02:33 +0100 <VOID404> Guess I am off to read some theory
2022-11-25 01:02:33 +0100 <VOID404> Thanks for again for help
2022-11-25 01:03:39 +0100void(~user@89.151.44.90)
2022-11-25 01:03:50 +0100void(~user@89.151.44.90) (Client Quit)
2022-11-25 01:03:52 +0100 <Guest55> Hi. I have a GADT: data BinTree (i :: filled) a where Empty :: BinTree E a; Node :: a -> BinTree i a -> BinTree i a -> BinTree i a and I want to write the function left (Node _ l _) = l with left :: BinTree N a -> BinTree i a but I get "can't match i with i1" .
2022-11-25 01:04:20 +0100 <Guest55> I tried left :: BinTree N a -> (forall i. BinTree i a) but that doesn't work either.
2022-11-25 01:04:28 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 01:04:28 +0100VOID418(~user@89.151.44.90)
2022-11-25 01:04:44 +0100 <Guest55> How can I do this?
2022-11-25 01:05:57 +0100VOID404(~VOID404@89.151.44.90) (Quit: Client closed)
2022-11-25 01:06:12 +0100 <int-e> hmm
2022-11-25 01:06:38 +0100 <oak-> I'd say best way to learn Mondas is to get your hands dirty with them
2022-11-25 01:06:42 +0100 <int-e> is that Node :: a -> BinTree i a -> BinTree i a -> BinTree N a?
2022-11-25 01:07:00 +0100 <int-e> Because otherwise the only inhabited type here is BinTree E a
2022-11-25 01:07:22 +0100 <monochrom> The type "left :: BinTree N a -> BinTree i a" means that the user (that's me) can use it as "BinTree N a -> BinTree N a" and I can also use it as "BinTree N a -> BinTree E a" and it is entirely up to me and it doesn't matter what's in the input tree. Clearly you don't mean it.
2022-11-25 01:07:53 +0100 <int-e> Guest55: There's a CPS trick for such scenarios, left :: BinTree N a -> (forall i. BinTree i a -> r) -> r
2022-11-25 01:08:51 +0100 <int-e> But honestly, I don't think this 'i' buys you much, and you'll live more happily without it.
2022-11-25 01:09:36 +0100 <int-e> Of course that's without knowing the motivation so I may be wrong.
2022-11-25 01:10:08 +0100 <Guest55> int-e: yes, it should be Node :: ... -> BinTree N a
2022-11-25 01:10:14 +0100kenaryn(~aurele@cre71-h03-89-88-44-27.dsl.sta.abo.bbox.fr)
2022-11-25 01:10:24 +0100 <int-e> :t runST
2022-11-25 01:10:25 +0100 <lambdabot> (forall s. ST s a) -> a
2022-11-25 01:12:22 +0100 <int-e> And there's existential types (which I prefer to write in GADT syntax, data SomeBinTree a where SomeBinTree :: BinTree i a -> SomeBinTree a )
2022-11-25 01:12:22 +0100 <Guest55> monochrom: That's why I tried BinTree N a -> (forall i. BinTree i a) so that I, the implementer, can choose i
2022-11-25 01:12:41 +0100 <int-e> Guest55: but that means the caller chooses i.
2022-11-25 01:13:26 +0100 <Guest55> Isn't it up to the implementer to choose i if I have a "nested" forall?
2022-11-25 01:13:32 +0100 <Axman6> BinTree N a -> (forall i. BinTree i a -> r) -> r should work, right?
2022-11-25 01:14:07 +0100 <int-e> Guest55: No. You have id :: forall a. a -> a; the caller of id picks the actual type a.
2022-11-25 01:14:31 +0100 <Guest55> Is that because the forall is not to the left of an arrow?
2022-11-25 01:15:46 +0100 <int-e> No.
2022-11-25 01:16:17 +0100 <Guest55> So I have 2 choices, use a wrapper type to make it an existential type or use CPS?
2022-11-25 01:16:49 +0100 <int-e> The CPS trick works because it makes your function the caller of the callback.
2022-11-25 01:17:12 +0100 <int-e> Those are the two ways I know of.
2022-11-25 01:17:59 +0100kenaryn(~aurele@cre71-h03-89-88-44-27.dsl.sta.abo.bbox.fr) (Quit: leaving)
2022-11-25 01:18:27 +0100 <Guest55> Type checker is happy with the CPS trick. Thank you.
2022-11-25 01:19:01 +0100Achylles(~Achylles_@2804:431:d724:a09c:67a2:eda9:70f0:1a66)
2022-11-25 01:19:56 +0100Patternm1ster(~georg@li1192-118.members.linode.com) (Quit: leaving)
2022-11-25 01:20:11 +0100Patternmaster(~georg@li1192-118.members.linode.com)
2022-11-25 01:20:11 +0100Patternmaster(~georg@li1192-118.members.linode.com) (Changing host)
2022-11-25 01:20:11 +0100Patternmaster(~georg@user/Patternmaster)
2022-11-25 01:23:23 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 01:24:29 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 01:26:42 +0100void_(~void@89.151.44.90) (Ping timeout: 265 seconds)
2022-11-25 01:26:48 +0100VOID418(~user@89.151.44.90) (Ping timeout: 260 seconds)
2022-11-25 01:31:35 +0100 <monochrom> The CPS trick is equivalent to the existential type wrapper.
2022-11-25 01:32:06 +0100 <monochrom> IOW you have only 1 choice bwahahahaha
2022-11-25 01:32:54 +0100 <monochrom> OK there are 2 choices. Use rank-2 CPS = existential. Don't bother with type-level programming at all.
2022-11-25 01:33:26 +0100 <monochrom> #ThinkOutsideTypeObsession
2022-11-25 01:37:59 +0100chomwitt(~chomwitt@ppp-94-67-236-76.home.otenet.gr) (Ping timeout: 264 seconds)
2022-11-25 01:43:48 +0100mvk(~mvk@2607:fea8:5ce3:8500::efb)
2022-11-25 01:44:23 +0100mvk(~mvk@2607:fea8:5ce3:8500::efb) (Client Quit)
2022-11-25 01:47:26 +0100 <int-e> monochrom: "equivalent" is doing some heavy lifting there
2022-11-25 01:48:29 +0100 <Axman6> is there an isomorphism between the two?
2022-11-25 01:48:38 +0100 <monochrom> Yes.
2022-11-25 01:48:39 +0100 <int-e> (both from a programmer perspective and from an implementation perspective)
2022-11-25 01:48:45 +0100 <int-e> yes, there is
2022-11-25 01:48:57 +0100 <int-e> it's more-or-less Church encodings
2022-11-25 01:49:34 +0100 <monochrom> (exists t. P t) is isomorphic to (forall r. (forall t. P t -> r) -> r)
2022-11-25 01:49:42 +0100 <Guest55> monochrom: yes. it seems i can't do much with this solution. I can't use the simplest function with left because "i would escape its scope". e.g. left (Node "foo" Empty Empty) id doesn't work.
2022-11-25 01:50:07 +0100 <monochrom> I don't feel it heavy, but that's moot; the important point is that it is true and every programmer should learn it sooner or later.
2022-11-25 01:50:31 +0100 <monochrom> FWIW GC is much much heavylifting too but we embrace it anyway.
2022-11-25 01:50:53 +0100 <int-e> I mean, even if two things are isomorphic, they often handle differently from a programmer's perspective.
2022-11-25 01:51:14 +0100 <monochrom> (Oh yes, GC is heavy for programmers too, namely those who are control freaks, i.e., most. By self-selection, most prorgrammers are control freaks and can't let go.)
2022-11-25 01:52:38 +0100 <monochrom> This is why education exists and is important.
2022-11-25 01:52:54 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 01:54:31 +0100 <monochrom> The more two equivalent things stand for two different perspectives, the more you should learn it.
2022-11-25 01:55:35 +0100razetime(~quassel@117.193.4.48)
2022-11-25 01:56:39 +0100 <monochrom> It is why engineers learn Fourier analysis and Laplace transform. Precisely because heavylifting equivalence.
2022-11-25 01:57:04 +0100 <monochrom> I don't hear engineers say "it's a lot of heavylifting, even for the learners, so let's skip it".
2022-11-25 01:57:08 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
2022-11-25 01:57:22 +0100 <monochrom> But perhaps that's why programmers are not ready to be called engineers.
2022-11-25 01:57:32 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 01:58:34 +0100lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-11-25 02:00:33 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 02:03:20 +0100 <monochrom> If i can only be N or E, you can also try: BinTree N a -> Either (BinTree E a) (BinTree N a), to express that it really depends on the input.
2022-11-25 02:03:33 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
2022-11-25 02:04:30 +0100 <monochrom> And this is thanks to the power of recognizing that you have an existential, but it's finite, so it's a finitary or.
2022-11-25 02:04:41 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 02:05:17 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
2022-11-25 02:08:25 +0100 <maerwald[m]> monochrom: education exists to control the masses
2022-11-25 02:08:35 +0100Kaiepi(~Kaiepi@108.175.84.104) (Ping timeout: 264 seconds)
2022-11-25 02:09:04 +0100causal(~user@50.35.83.177)
2022-11-25 02:09:24 +0100 <monochrom> See? Control freaks think that everything is about control. >:)
2022-11-25 02:10:39 +0100 <maerwald[m]> Even academic education is full of nonsensical doctrines
2022-11-25 02:10:46 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 02:11:33 +0100 <monochrom> Sure. I brought up the good part of education. You can talk about the bad part.
2022-11-25 02:12:16 +0100 <monochrom> Or you could agree that I am not an educator, I am something better, I am an enlightener. :)
2022-11-25 02:13:27 +0100 <maerwald[m]> Yeah, you're the devil, which can be refreshing occasionally
2022-11-25 02:18:08 +0100xff0x(~xff0x@2405:6580:b080:900:ba2b:e368:237f:a79) (Ping timeout: 260 seconds)
2022-11-25 02:20:18 +0100srz(~srz@179.36.100.166)
2022-11-25 02:20:21 +0100razetime(~quassel@117.193.4.48) (Ping timeout: 265 seconds)
2022-11-25 02:20:29 +0100razetime(~quassel@117.193.5.135)
2022-11-25 02:21:24 +0100sawilagar_(~sawilagar@user/sawilagar) (Ping timeout: 260 seconds)
2022-11-25 02:26:05 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2022-11-25 02:27:34 +0100razetime_(~quassel@117.254.34.88)
2022-11-25 02:27:47 +0100razetime(~quassel@117.193.5.135) (Ping timeout: 264 seconds)
2022-11-25 02:29:36 +0100bobbingbob(~bobbingbo@2604:3d09:207f:f650::b469)
2022-11-25 02:32:35 +0100Xeroine(~Xeroine@user/xeroine) (Ping timeout: 264 seconds)
2022-11-25 02:32:59 +0100king_gs(~Thunderbi@187.201.139.206) (Read error: Connection reset by peer)
2022-11-25 02:33:18 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
2022-11-25 02:34:23 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 02:37:36 +0100 <bobbingbob> hooray i got hickory working
2022-11-25 02:37:44 +0100razetime_(~quassel@117.254.34.88) (Ping timeout: 268 seconds)
2022-11-25 02:37:51 +0100razetime(~quassel@117.254.34.18)
2022-11-25 02:37:54 +0100 <bobbingbob> my mistake was a dependency of a dependency not being installed
2022-11-25 02:38:11 +0100 <bobbingbob> i wish there could just be one package manager for everything
2022-11-25 02:38:49 +0100razetime(~quassel@117.254.34.18) (Client Quit)
2022-11-25 02:40:20 +0100 <jackdk> Do you have a moment to talk about Nix?
2022-11-25 02:40:23 +0100 <yushyin> it is called nix
2022-11-25 02:40:29 +0100 <jackdk> yushyin++
2022-11-25 02:43:43 +0100 <monochrom> haha
2022-11-25 02:44:07 +0100srz(~srz@179.36.100.166) (Read error: Connection reset by peer)
2022-11-25 02:44:32 +0100 <monochrom> https://xkcd.com/927/ applies.
2022-11-25 02:44:33 +0100 <bobbingbob> ive been thinking about switching to nixos. how user-friendly is it? i run arch right now (yes i mentioned it). I'm fine doing research and fixing problems but it would be nice if it were easy to setup and run
2022-11-25 02:44:56 +0100 <monochrom> You can use nix without nixos.
2022-11-25 02:44:59 +0100 <yushyin> you don't need nixos to use nix
2022-11-25 02:45:08 +0100srz(~srz@179.36.100.166)
2022-11-25 02:45:08 +0100 <monochrom> Some people even run Windows.
2022-11-25 02:45:11 +0100Xeroine(~Xeroine@user/xeroine)
2022-11-25 02:45:22 +0100srz(~srz@179.36.100.166) (Remote host closed the connection)
2022-11-25 02:45:39 +0100 <maerwald[m]> monochrom: nixpkgs are part of NixOS
2022-11-25 02:45:39 +0100 <maerwald[m]> So no, you can't
2022-11-25 02:45:44 +0100srz(~srz@179.36.100.166)
2022-11-25 02:45:45 +0100 <bobbingbob> do you think i should use nix as a subsitute for pacman? or just for haskell development
2022-11-25 02:45:47 +0100 <maerwald[m]> Unless you write your own... uh, everything
2022-11-25 02:45:51 +0100 <monochrom> "You can use nix without unix" ---> simplify ---> "You can use nix without u" >:)
2022-11-25 02:46:16 +0100 <maerwald[m]> bobbingbob: don't use it at all is my suggestion
2022-11-25 02:46:32 +0100 <jackdk> I have used nixos for years, but I was lucky enough to have a week of no responsibilities at a new job to learn enough to get over the hump. I'd strongly recommend installing Nix on a distro you're comfortable with, learning learning enough to use `nix-shell`
2022-11-25 02:46:39 +0100 <maerwald[m]> Unless you have a lot of free time to waste
2022-11-25 02:46:59 +0100 <jackdk> Once you're comfortable, consider `home-manager` and later consider nixos if you want more declarative goodness
2022-11-25 02:47:55 +0100 <jackdk> You can plop the following `shell.nix` file into many single-package haskell projects and use it to get a temporary environment to hack on things: `{ nixpkgs ? import <nixpkgs> {} }: nixpkgs.haskellPackages.developPackage { root = ./.; }`
2022-11-25 02:48:02 +0100 <maerwald[m]> Declarative hell. Then your cache breaks and you realize it's not actually reproducible
2022-11-25 02:48:03 +0100srz(~srz@179.36.100.166) (Read error: Connection reset by peer)
2022-11-25 02:48:06 +0100srz_(~srz@179.36.100.166)
2022-11-25 02:48:34 +0100 <maerwald[m]> Otherwise explain to me why I get compile errors on cache misses :)
2022-11-25 02:48:52 +0100srz_(~srz@179.36.100.166) (Remote host closed the connection)
2022-11-25 02:49:19 +0100 <jackdk> Yeah, I've had that with old nixpkgs sometimes, when I stress-test things by building with no substituters
2022-11-25 02:50:48 +0100bobbingbob(~bobbingbo@2604:3d09:207f:f650::b469) (Ping timeout: 260 seconds)
2022-11-25 02:51:45 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 02:52:46 +0100 <maerwald[m]> The other thing is... if you rely on overly expressive systems like nix, you become lazy and sloppy and stop caring about "contracts", because you have too much control
2022-11-25 02:53:07 +0100nate4(~nate@98.45.169.16)
2022-11-25 02:53:25 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 02:56:27 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp)
2022-11-25 02:58:23 +0100nate4(~nate@98.45.169.16) (Ping timeout: 264 seconds)
2022-11-25 02:58:23 +0100sammelweis(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 03:01:33 +0100sammelweis(~quassel@c-68-48-18-140.hsd1.mi.comcast.net)
2022-11-25 03:02:08 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Remote host closed the connection)
2022-11-25 03:06:22 +0100dsrt^(~dsrt@76.145.185.103)
2022-11-25 03:10:28 +0100 <jean-paul[m]> What does "overly expressive" mean here?
2022-11-25 03:11:43 +0100 <oak-> I've been using NixOS for little over year now, I'd say it's one of the best things I've found out on Linux world, and I regret not taking it into use earlier
2022-11-25 03:13:09 +0100 <oak-> There is some learning curve yes, but I used to use Arch Linux before for over 10 years
2022-11-25 03:14:35 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
2022-11-25 03:15:17 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 03:24:47 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 264 seconds)
2022-11-25 03:30:31 +0100EvanR(~EvanR@user/evanr) (Remote host closed the connection)
2022-11-25 03:30:39 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 03:30:50 +0100EvanR(~EvanR@user/evanr)
2022-11-25 03:32:45 +0100Achylles(~Achylles_@2804:431:d724:a09c:67a2:eda9:70f0:1a66) (Quit: Leaving)
2022-11-25 03:35:45 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 03:40:51 +0100wagle(~wagle@quassel.wagle.io) (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.)
2022-11-25 03:41:20 +0100wagle(~wagle@quassel.wagle.io)
2022-11-25 03:41:47 +0100money(money@user/polo) ()
2022-11-25 03:42:17 +0100money(money@user/polo)
2022-11-25 04:07:47 +0100 <maerwald[m]> Well, learning curve is just one thing. The other is that it's just very messy.
2022-11-25 04:10:30 +0100Guest9719(~Guest97@104.129.85.110)
2022-11-25 04:11:09 +0100marc(~marc@5.83.191.93)
2022-11-25 04:11:33 +0100marcGuest8573
2022-11-25 04:14:24 +0100Guest2573(~marc@5.83.191.76) (Ping timeout: 256 seconds)
2022-11-25 04:33:16 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 04:40:22 +0100ellensol(~ln@pc-ellar188.it.uu.se) (Ping timeout: 252 seconds)
2022-11-25 04:44:13 +0100mzan(~quassel@mail.asterisell.com) (Quit: https://quassel-irc.org - Chat comfortably. Anywhere.)
2022-11-25 04:45:22 +0100mzan(~quassel@mail.asterisell.com)
2022-11-25 04:48:38 +0100nate4(~nate@98.45.169.16)
2022-11-25 04:58:36 +0100td_(~td@83.135.9.50) (Ping timeout: 256 seconds)
2022-11-25 05:00:16 +0100td_(~td@83.135.9.38)
2022-11-25 05:02:19 +0100ellensol(~ln@pc-ellar188.it.uu.se)
2022-11-25 05:06:11 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 05:07:06 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 265 seconds)
2022-11-25 05:08:04 +0100lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-25 05:08:08 +0100 <dminuoso> maerwald[m]: Yes you can use nix without nixos just fine?
2022-11-25 05:08:21 +0100 <dminuoso> I think you have that statement flipped around.
2022-11-25 05:08:41 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net)
2022-11-25 05:35:53 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
2022-11-25 05:37:06 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 05:43:36 +0100 <monochrom> Can you use nix without any os? >:)
2022-11-25 05:45:18 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643) (Remote host closed the connection)
2022-11-25 05:45:55 +0100FinnElija(~finn_elij@user/finn-elija/x-0085643)
2022-11-25 05:49:18 +0100nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-11-25 05:56:19 +0100Vajb(~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d) (Read error: Connection reset by peer)
2022-11-25 05:57:08 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi)
2022-11-25 06:02:10 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 06:05:13 +0100Guest9719(~Guest97@104.129.85.110) (Quit: Client closed)
2022-11-25 06:09:34 +0100Vajb(~Vajb@hag-jnsbng11-58c3a5-27.dhcp.inet.fi) (Read error: Connection reset by peer)
2022-11-25 06:12:50 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2022-11-25 06:12:52 +0100Vajb(~Vajb@2001:999:504:3ad6:52a4:a3b5:32d8:e74d)
2022-11-25 06:17:27 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Quit: No Ping reply in 180 seconds.)
2022-11-25 06:19:01 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 06:21:20 +0100raehik(~raehik@cpc95906-rdng25-2-0-cust156.15-3.cable.virginm.net) (Ping timeout: 256 seconds)
2022-11-25 06:26:22 +0100joshua5040(~joshua@2604:3d08:bd82:8800::a0c9)
2022-11-25 06:27:13 +0100Kaiepi(~Kaiepi@108.175.84.104)
2022-11-25 06:36:04 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915) (Ping timeout: 256 seconds)
2022-11-25 06:36:28 +0100Lord_of_Life(~Lord@user/lord-of-life/x-2819915)
2022-11-25 06:36:33 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
2022-11-25 06:54:24 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Ping timeout: 265 seconds)
2022-11-25 06:56:51 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 07:02:18 +0100 <chreekat> I am compelled to proclaim that nixos feels like the sanest thing to happen to unix ever. It's only complex because it makes unix's complexity explicit, which then allows it to be managed
2022-11-25 07:02:56 +0100 <chreekat> i'm not trying to state universal truths here, just my impression
2022-11-25 07:03:51 +0100 <chreekat> like nix drives me crazy but it also has allowed me to do in-place OS upgrades without wiping the whole disk since 2017
2022-11-25 07:04:52 +0100finsternis(~X@23.226.237.192) (Read error: Connection reset by peer)
2022-11-25 07:06:39 +0100lisbeths(uid135845@id-135845.lymington.irccloud.com)
2022-11-25 07:07:07 +0100Axman6has never wiped an macOS disk and still has the same user directory and for over a decade...
2022-11-25 07:07:29 +0100 <Axman6> It blow my mind that people (used to?) just blow everything away and reinstall windows
2022-11-25 07:08:08 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-25 07:11:45 +0100takuan(~takuan@178-116-218-225.access.telenet.be)
2022-11-25 07:14:04 +0100 <jackdk> I used to do that to my GNU/Linux installs, too
2022-11-25 07:15:05 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470) (Remote host closed the connection)
2022-11-25 07:18:35 +0100 <chreekat> yeah i don't feel like it's asking for much, but that's how I feel continually working with linux haha
2022-11-25 07:27:08 +0100 <maerwald[m]> dminuoso: yeah, but then you won't have any access to any packages
2022-11-25 07:27:34 +0100 <maerwald[m]> It's like saying, hey, you can use gentoo without the portage tree of ebuilds.
2022-11-25 07:27:38 +0100 <maerwald[m]> I mean, duh
2022-11-25 07:28:28 +0100 <maerwald[m]> https://github.com/NixOS/nixpkgs
2022-11-25 07:28:36 +0100 <maerwald[m]> They are clearly part of NixOS
2022-11-25 07:29:39 +0100 <maerwald[m]> What people mean is: you don't have to boot into a NixOS to use NixOS
2022-11-25 07:29:50 +0100 <maerwald[m]> That's as old as, well... chroots
2022-11-25 07:30:03 +0100joshua5040(~joshua@2604:3d08:bd82:8800::a0c9) (Quit: WeeChat 3.7.1)
2022-11-25 07:31:13 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 07:32:32 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 07:32:33 +0100 <dminuoso> maerwald[m]: You're mixing things up.
2022-11-25 07:32:38 +0100 <chreekat> I'm sorry what? How is nixpkgs part of nixos?
2022-11-25 07:32:53 +0100califax(~califax@user/califx) (Ping timeout: 255 seconds)
2022-11-25 07:32:57 +0100 <dminuoso> maerwald[m]: nixos without nixpkgs is not really a thing, but nix without nixos is perfectly a thing.
2022-11-25 07:33:08 +0100 <dminuoso> nixos is really a separate thing
2022-11-25 07:33:16 +0100califax(~califax@user/califx)
2022-11-25 07:33:17 +0100 <maerwald[m]> chreekat: see above
2022-11-25 07:33:46 +0100 <maerwald[m]> dminuoso: yes, I said so above, you can use nix without nixpkgs
2022-11-25 07:34:19 +0100 <dminuoso> maerwald[m] | They are clearly part of NixOS
2022-11-25 07:34:22 +0100 <maerwald[m]> But I don't think that's what many people do
2022-11-25 07:34:34 +0100 <dminuoso> Well yes, the repository containing nix derivations and nixos modules (two separate things!) is kept in one thing for a bunch of reasons.
2022-11-25 07:34:40 +0100 <dminuoso> But that's really irrelevant from a user perspecftive
2022-11-25 07:34:41 +0100 <chreekat> maerwald: unfortunately what you wrote above doesn't explain to me how nixpkgs is part of nixos. I mean, unless you mean "NixOS, the umbrella GitHub organization"
2022-11-25 07:34:58 +0100 <maerwald[m]> They mean you can use nix (including nixpkgs) in any distro without booting into a real NixOS
2022-11-25 07:35:03 +0100 <dminuoso> You could delete all of nixos modules from the nixpkgs repository, and not cause breakage in nix itself.
2022-11-25 07:35:07 +0100 <dminuoso> Or in nixpkgs.
2022-11-25 07:35:24 +0100 <dminuoso> Plenty people use it that way
2022-11-25 07:35:35 +0100 <maerwald[m]> Really?
2022-11-25 07:35:37 +0100 <dminuoso> Yes.
2022-11-25 07:35:43 +0100 <chreekat> Yeah, did that at the old job
2022-11-25 07:36:12 +0100 <dminuoso> The two things are kept together in the git repository for convenience mostly
2022-11-25 07:36:41 +0100 <maerwald[m]> chreekat: I mean, distro packages are not developed in isolation. They are developed as part of a distro. 80% of what makes a distro are its packages.
2022-11-25 07:37:17 +0100 <dminuoso> maerwald[m]: consider that there's a lot of packages, such as ghc, which simply ships with a shell.nix and or default.nix to offer a reproducible way of building it, without imposing any requirement to run nixos.
2022-11-25 07:37:55 +0100 <maerwald[m]> dminuoso: and those recipes do not use any nixpkgs to set up the env,
2022-11-25 07:37:56 +0100 <maerwald[m]> ?
2022-11-25 07:37:58 +0100 <dminuoso> its done pretty much because there is an audience of users that have nix installed on their arch/gentoo/debian/ubuntu/macOS/whatever
2022-11-25 07:38:07 +0100 <dminuoso> maerwald[m]: they do, but thats not nixos.
2022-11-25 07:38:20 +0100 <maerwald[m]> This is where I disagree in semantics
2022-11-25 07:38:35 +0100 <chreekat> I see, I guess this is arguing semantics. If you imagine that Nix leads inexorably to a full operating system distribution, then you could argue that it was the full operating system all along
2022-11-25 07:38:42 +0100 <dminuoso> nixos is built around the idea of whats called `modules`, which are specially structured nix expressions designed to express the arbitrary file system and booting process (including the kernel)
2022-11-25 07:38:49 +0100 <dminuoso> nixpkgs is built around nix derivations
2022-11-25 07:38:54 +0100 <maerwald[m]> A distro is not it's glue code or boot setup scripts. It's the packages.
2022-11-25 07:39:07 +0100 <dminuoso> maerwald[m]: you really are conflating things here for nixos.
2022-11-25 07:39:12 +0100 <maerwald[m]> That's the fundamental thing that makes a distro
2022-11-25 07:39:17 +0100 <dminuoso> not entirely
2022-11-25 07:39:22 +0100 <dminuoso> it depends on your notion of package
2022-11-25 07:39:30 +0100 <dminuoso> nixos modules are the packages you think of
2022-11-25 07:39:40 +0100 <dminuoso> that describe how things are wired in with your system, like installing systemd units and the like
2022-11-25 07:39:53 +0100 <dminuoso> or creating system users
2022-11-25 07:40:03 +0100 <dminuoso> but the nixpkgs derivations dont do that
2022-11-25 07:40:21 +0100 <maerwald[m]> Yeah, that distinction isn't relevant to me
2022-11-25 07:40:39 +0100 <dminuoso> I mean I can see how you might see nixpkgs as a kind of linux distribution, sure.
2022-11-25 07:40:49 +0100 <dminuoso> but thats not nixos.
2022-11-25 07:40:52 +0100 <dminuoso> nixos is the nixos modules.
2022-11-25 07:41:59 +0100 <dminuoso> Its sort of the difference between `dpkg --install`, and what `configure && make && make install`
2022-11-25 07:43:41 +0100kenran(~user@user/kenran)
2022-11-25 07:43:59 +0100 <chreekat> "Nix: A Safe and Policy-Free System for Software Development" (E Dolstra, 2004). " In the abstract it talks about "Nix, a deployment system". In 2008 there's an article "Nix fixes dependency hell on all Linux distributions". So I think, historically speaking, Nix definitely came first. There is also a paper introducing NixOS later in 2008
2022-11-25 07:44:16 +0100 <maerwald[m]> dminuoso: well, you can distinguish between certain package sets surely, like core, community and AUR in archlinux
2022-11-25 07:44:26 +0100 <dminuoso> maerwald[m]: Its not that either.
2022-11-25 07:44:28 +0100 <maerwald[m]> In the end, those are all considered under one distro
2022-11-25 07:44:30 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2022-11-25 07:44:32 +0100 <dminuoso> maerwald[m]: nixos modules really si something else.
2022-11-25 07:44:42 +0100 <dminuoso> nixos is literally how nixos modules get turned into activation scripts.
2022-11-25 07:45:24 +0100 <maerwald[m]> You're talking about technical details. I'm saying a distro is the package set.
2022-11-25 07:45:29 +0100 <dminuoso> Huh?
2022-11-25 07:45:43 +0100 <dminuoso> Yes, but calling nixpkgs nixos is just nonsense.
2022-11-25 07:45:49 +0100 <maerwald[m]> nixpkgs readme btw starts with the word NixOS
2022-11-25 07:45:54 +0100nate4(~nate@98.45.169.16)
2022-11-25 07:46:18 +0100 <dminuoso> The git repository itself provides for both, yes.
2022-11-25 07:46:25 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 07:46:40 +0100 <dminuoso> But they are completely separate things
2022-11-25 07:47:07 +0100 <chreekat> "Nixpkgs is a collection of 80,000 software packages that can be installed with Nix. It also implements NixOS..."
2022-11-25 07:47:09 +0100 <dminuoso> Like I said, the only reason they are kept in a common repository is just convenience.
2022-11-25 07:47:27 +0100 <dminuoso> I dont know what to tell you that NixOS *specifically* is nixos modules.
2022-11-25 07:47:44 +0100 <chreekat> I won't argue if you think that distros are synonymous with their package sets, but I'll just say I don't think people working on nix see it the same way
2022-11-25 07:47:50 +0100 <dminuoso> While `nixpkgs` in all common uses of it almost always means the pkgs/ expression inside of it.
2022-11-25 07:48:01 +0100 <maerwald[m]> So the distro then is called 'nixpkgs'?
2022-11-25 07:48:07 +0100 <dminuoso> maerwald[m]: the one you are thinking of, yes.
2022-11-25 07:48:15 +0100 <maerwald[m]> And it's a distro that you cannnot boot into?
2022-11-25 07:48:19 +0100 <dminuoso> yes.
2022-11-25 07:48:25 +0100 <maerwald[m]> Amazing
2022-11-25 07:48:31 +0100 <maerwald[m]> 😅
2022-11-25 07:48:34 +0100 <chreekat> only if you insist on claiming that distros are synonymous with their package sets, which i don't :)
2022-11-25 07:49:06 +0100 <maerwald[m]> chreekat: well, it allows to weed out all these pseudo distros that add a new logo and re-use ubuntu pkgs
2022-11-25 07:49:19 +0100 <maerwald[m]> Packaging is the main work.
2022-11-25 07:50:21 +0100nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-11-25 07:50:21 +0100 <chreekat> Isn't that an argument *against* making that claim? I mean it's a bit uncharitable to call distros "pseudo distros"
2022-11-25 07:50:25 +0100 <dminuoso> maerwald[m]: now, nixos is built ontop of nixpkgs, and adds recipes for how to synthesize the FHS, generate configuration, install these packages into something resembling the FHS, recipies for how to install and manage the boot loader, etc..
2022-11-25 07:50:40 +0100 <dminuoso> and all those use the packages from nixpkgs
2022-11-25 07:50:52 +0100 <maerwald[m]> Yes, every distro has that layer
2022-11-25 07:50:54 +0100 <chreekat> anyway back to haskell, see ya
2022-11-25 07:51:02 +0100 <dminuoso> maerwald[m]: the layer is at a separate point, though.
2022-11-25 07:51:10 +0100 <dminuoso> because you can use nixpkgs from inside say macOS
2022-11-25 07:51:20 +0100 <dminuoso> and install a lot of things that dont requrie seetting up services
2022-11-25 07:51:27 +0100 <dminuoso> say you want vim, you can just say `nix-shell -p vim`, and get provided with it
2022-11-25 07:51:39 +0100 <maerwald[m]> dminuoso: you can achieve similar things with chroots
2022-11-25 07:51:43 +0100 <dminuoso> absolutely, yes.
2022-11-25 07:51:44 +0100 <maerwald[m]> Although different
2022-11-25 07:52:28 +0100 <dminuoso> Im in no way trying to sell this as "thats the only way to achieve it", but merely trying to give you an indication that `nixpkgs` is not quite a packages distribution you are used to, because the individual packages have much less build information than your typical .deb
2022-11-25 07:53:33 +0100 <dminuoso> because the derivations in nixpkgs have only enough to install them into the nix store, but nothing about system users, configuring them, setting up systemd units, and the like
2022-11-25 07:53:36 +0100 <maerwald[m]> So to me, I still conceptualize a distro with it's active packaging effort. Configuration, installer and glue code alone don't make a distro. And I'm assuming that nixpkgs isn't entirely disconnected from NixOS in terms of release schedule, packaging policies, collaboration and compatibility that you can really consider them proper separate projects
2022-11-25 07:54:16 +0100heisenberg2(~heisenber@104.28.223.9)
2022-11-25 07:54:34 +0100heisenberg2(~heisenber@104.28.223.9) (Remote host closed the connection)
2022-11-25 07:54:37 +0100 <dminuoso> Indeed, they are aligned with each other.
2022-11-25 07:55:17 +0100 <dminuoso> It may indeed be useful to think of the pkgs set of nixpkgs as a kind of nixos-lite that can either be embedded into an arbitrary linux, or be used to build nixos ontop.
2022-11-25 07:55:30 +0100 <maerwald[m]> Funtoo for example is a gentoo derivate that re-uses gentoo pkgs and does some other things on top. So yes, you can use gentoo packages in other ways too
2022-11-25 07:55:33 +0100 <maerwald[m]> But I still consider them *gentoo*
2022-11-25 07:55:38 +0100 <maerwald[m]> That's what the devs spend 90% of their time on
2022-11-25 07:56:30 +0100 <dminuoso> So for instance, the entire nixpkgs git repo is managed in half annual releases - but there is separate branches like nixos-unstable and nixpkgs-unstable, which gives a slight hint of separation, because one guarantees nixos tests succeed, the other does not.
2022-11-25 07:56:33 +0100 <maerwald[m]> And packaging is hard
2022-11-25 07:56:39 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 07:57:06 +0100 <dminuoso> so nixpkgs-unstable can have completely broken nixos modules, but you get the newest pkgs
2022-11-25 07:57:14 +0100 <maerwald[m]> Are the development teams strictly separate?
2022-11-25 07:57:26 +0100zmt01(~zmt00@user/zmt00) (Ping timeout: 246 seconds)
2022-11-25 07:57:33 +0100 <dminuoso> I cannot say because I do not know.
2022-11-25 07:57:52 +0100 <maerwald[m]> I'd imagine they have power over both and there need not be any negotiations
2022-11-25 07:58:02 +0100 <maerwald[m]> Otherwise that becomes bottleneck quickly
2022-11-25 07:58:15 +0100Guest55(~Guest55@p200300ef9716451373d1c50d5ff22e08.dip0.t-ipconnect.de) (Quit: Client closed)
2022-11-25 07:58:34 +0100Guest55(~Guest55@p200300ef9716451373d1c50d5ff22e08.dip0.t-ipconnect.de)
2022-11-25 08:00:15 +0100Guest55(~Guest55@p200300ef9716451373d1c50d5ff22e08.dip0.t-ipconnect.de) (Client Quit)
2022-11-25 08:02:55 +0100zmt00(~zmt00@user/zmt00)
2022-11-25 08:05:06 +0100 <maerwald[m]> dminuoso: I expect you to give a NixOS workshop at Zurihac next year then
2022-11-25 08:05:12 +0100heisenberg2(~heisenber@104.28.255.11)
2022-11-25 08:05:33 +0100heisenbe_(~heisenber@104.28.223.10)
2022-11-25 08:05:40 +0100 <dminuoso> Mmm, might just do!
2022-11-25 08:05:41 +0100heisenbe_(~heisenber@104.28.223.10) (Remote host closed the connection)
2022-11-25 08:06:03 +0100 <maerwald[m]> I'll attend and ask productive questions :D
2022-11-25 08:07:02 +0100 <dminuoso> My key advantage is that I know you like Guinness. Ill happily provide you with a plethora of pints before the workshop begins.
2022-11-25 08:07:09 +0100 <maerwald[m]> We can bikeshed about the meaning of "reproducible"
2022-11-25 08:07:18 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 256 seconds)
2022-11-25 08:07:53 +0100 <maerwald[m]> Like, nix doesn't isolate from all of the env (e.g. kernel) :p
2022-11-25 08:09:14 +0100 <dminuoso> Sure, selling nix as `deterministic` is overselling a bit.
2022-11-25 08:09:39 +0100 <dminuoso> But it provides an infrastructure to come closer to whatever that means than most other attempts at least.
2022-11-25 08:09:53 +0100heisenberg2(~heisenber@104.28.255.11) (Ping timeout: 260 seconds)
2022-11-25 08:10:13 +0100 <dminuoso> But for what its worth, nix expressions themselves *are* deterministic.
2022-11-25 08:10:24 +0100 <dminuoso> well in the absence of certain things, which can however forbid
2022-11-25 08:10:32 +0100 <carbolymer> dminuoso: wdym, isn't nix deterministic?
2022-11-25 08:10:39 +0100 <dminuoso> carbolymer: its a pure functional language.
2022-11-25 08:11:01 +0100 <dminuoso> well, you can have impure nix expressions for starters
2022-11-25 08:11:10 +0100 <carbolymer> ah yes
2022-11-25 08:11:11 +0100 <dminuoso> or depend on impure things
2022-11-25 08:11:22 +0100 <carbolymer> right, now I see
2022-11-25 08:11:30 +0100 <dminuoso> its small subtle things like "fetch the source" - its not truly deterministic in the sense that the source might just be gone
2022-11-25 08:11:39 +0100 <dminuoso> and then it will suddenly not compute anymore
2022-11-25 08:11:44 +0100 <dminuoso> despite you having done nothing on your local machine
2022-11-25 08:11:54 +0100 <carbolymer> dminuoso: then you get deterministic output - or error?
2022-11-25 08:12:32 +0100 <maerwald[m]> dminuoso: I just know that on gitlab GHC CI, when I got cache misses, because GHC recipeds bumped some stuff and cache eviction got triggered. ..my CI actions started to compile stuff for 5 hours and then failed with compilation errors
2022-11-25 08:12:41 +0100 <maerwald[m]> That was the last straw for me :p
2022-11-25 08:13:07 +0100 <dminuoso> Hard to judge without seeing the details *shrugs*
2022-11-25 08:14:01 +0100 <dminuoso> carbolymer: that depends on what the build does.
2022-11-25 08:14:08 +0100 <dminuoso> carbolymer: there are a lot of non-deterministic builds.
2022-11-25 08:15:00 +0100 <dminuoso> carbolymer: consider parallel builds, for instance.
2022-11-25 08:15:27 +0100 <dminuoso> quite a bunch of those parallel builds are disabled to promote reproducability
2022-11-25 08:17:11 +0100tcard(~tcard@2400:4051:5801:7500:19ce:ed82:2ab7:90f9) (Quit: Leaving)
2022-11-25 08:17:27 +0100 <dminuoso> There's tricks like forcing the default ctime stamps to Jan 1, 1970. There were a few isolated packages that actually produced incorrect build output if there were some weird unexpected ctime differences.
2022-11-25 08:17:32 +0100 <dminuoso> It's a bit absurd.
2022-11-25 08:17:48 +0100 <maerwald[m]> And there are hidden things that can leak into builds too, liko current time
2022-11-25 08:18:03 +0100 <dminuoso> nix is both good and problematic in that it elevates these problems, it highlights them, but it also tends to promote them to a) errors or b) like maerwald[m]'s experienced needless rebuilding things.
2022-11-25 08:19:06 +0100 <dminuoso> (not sure how content addressed forms will make this really problematic)
2022-11-25 08:19:57 +0100 <dminuoso> maerwald[m]: the real question then becomes: arent packages that even care about that thing not properly broken?
2022-11-25 08:19:58 +0100 <maerwald[m]> Java builds depend on kernel specifities too afair
2022-11-25 08:20:30 +0100 <dminuoso> One of the most horrible experience Ive ever had was packaging Python packages under Nix
2022-11-25 08:20:38 +0100 <maerwald[m]> dminuoso: depends on your expectations really. They will.probably work for 90% of distros
2022-11-25 08:20:43 +0100 <dminuoso> But it turns out, the real reason for that is barely any python package has properly set dependencies.
2022-11-25 08:20:44 +0100 <maerwald[m]> I'd consider it bad too
2022-11-25 08:20:52 +0100 <maerwald[m]> But not sure if it's broken
2022-11-25 08:20:54 +0100king_gs(~Thunderbi@187.201.139.206) (Ping timeout: 256 seconds)
2022-11-25 08:20:57 +0100 <dminuoso> They just randomly do things like fetch packages via http during Setup.py and manually install them..
2022-11-25 08:21:38 +0100 <dminuoso> or dependencies not specified entirely
2022-11-25 08:21:43 +0100 <dminuoso> missing upper bounds, missing lower bounds
2022-11-25 08:21:44 +0100 <maerwald[m]> E.g. do you consider a build system broken that doesn't let you control the lib/ subdir, but only the prefix? This will "break" for multilib distros like gentoo and debian, but be fine for others
2022-11-25 08:21:48 +0100tcard(~tcard@2400:4051:5801:7500:19ce:ed82:2ab7:90f9)
2022-11-25 08:21:59 +0100 <dminuoso> and those are not isolated instances. about every second python package is so horribly mistreated
2022-11-25 08:22:05 +0100 <maerwald[m]> I've patched hundreds of those build systems
2022-11-25 08:22:28 +0100 <maerwald[m]> So for a packager, everything is broken
2022-11-25 08:22:57 +0100 <maerwald[m]> But if you assume FHS and anything outside it can go f off, then hmm
2022-11-25 08:23:28 +0100 <dminuoso> maerwald[m]: hah for what its worth, nix has a full escape hatch called buildFHSUserEnv
2022-11-25 08:23:37 +0100 <dminuoso> Which is one of the really cool things about nix
2022-11-25 08:23:44 +0100chomwitt(~chomwitt@2a02:587:7a0d:dd00:1ac0:4dff:fedb:a3f1)
2022-11-25 08:24:02 +0100 <dminuoso> I had this vmware nonsense I had to install, but it really felt like rampaging all over /etc, installing and deleting files randomly
2022-11-25 08:24:02 +0100 <maerwald[m]> Yeah, but you can't do a proper nixpkg recipe with a build system with zero control knobs
2022-11-25 08:24:23 +0100 <dminuoso> so buildFHSUserEnv synthesizes a traditional FHS, and chroots you into it. :p
2022-11-25 08:24:33 +0100 <maerwald[m]> Packagers will always patch stuff downstream
2022-11-25 08:24:33 +0100 <maerwald[m]> Forever
2022-11-25 08:24:47 +0100 <dminuoso> And then you can just imperatively do anything you want. A kind of no-bullshit-container if you want.
2022-11-25 08:25:20 +0100 <dminuoso> yeah you do have a point though, as a package you will always be at the merci of poorly written packages.
2022-11-25 08:25:23 +0100 <dminuoso> *packager
2022-11-25 08:25:38 +0100 <dminuoso> or poorly written software build processes
2022-11-25 08:26:02 +0100 <dminuoso> Much of the early portability was achieved by autotools.
2022-11-25 08:26:19 +0100 <dminuoso> Which is a large stack of crazy.
2022-11-25 08:26:26 +0100 <maerwald[m]> https://github.com/IgnorantGuru/spacefm/issues/452
2022-11-25 08:26:48 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 08:27:04 +0100 <maerwald[m]> Here the author didn't believe in /usr/bin/env for security reasons
2022-11-25 08:27:19 +0100 <maerwald[m]> And /bin/bash broke nixpkgs
2022-11-25 08:27:41 +0100 <dminuoso> maerwald[m]: hah the /bin/bash problem is interesting! there exist no standardized portable solution for it!
2022-11-25 08:28:00 +0100 <dminuoso> I recall some notes in POSIX that suggested something akin to /usr/bin/env *should* be used, but not that solution in particular
2022-11-25 08:28:09 +0100 <dminuoso> But they also hinted that this be a distribution specific way
2022-11-25 08:29:33 +0100 <dminuoso> maerwald[m]: I think its absolutely mindboggingly absurd to do that check at runtime.
2022-11-25 08:29:49 +0100 <dminuoso> They even use autotools, wtf.
2022-11-25 08:29:59 +0100 <dminuoso> Ah but hold on, its a runtime requirement
2022-11-25 08:30:01 +0100 <dminuoso> Mm
2022-11-25 08:30:35 +0100 <maerwald[m]> Posix doesn't suggest /usr/bin/env afaik
2022-11-25 08:30:44 +0100 <maerwald[m]> https://pubs.opengroup.org/onlinepubs/009695399/utilities/sh.html
2022-11-25 08:31:01 +0100 <maerwald[m]> "Applications should note that the standard PATH to the shell cannot be assumed to be either /bin/sh or /usr/bin/sh, and should be determined by interrogation of the PATH returned by getconf PATH , ensuring that the returned pathname is an absolute pathname and not a shell built-in."
2022-11-25 08:31:38 +0100 <dminuoso> Like I said, not explicitly
2022-11-25 08:32:03 +0100 <dminuoso> but /usr/bin/env does end up working to the same effect
2022-11-25 08:32:43 +0100chexum_(~quassel@gateway/tor-sasl/chexum)
2022-11-25 08:32:57 +0100 <maerwald[m]> You can't make any assumptions about the location of 'env' either
2022-11-25 08:34:05 +0100 <dminuoso> Absolutely. This is one of the very things that NixOS places something under a predicable path as a pragmatic choice
2022-11-25 08:34:24 +0100 <dminuoso> Because it is such a well established standard, you would have to pretty much fix up *every* shell script in existence inside the nix store.
2022-11-25 08:34:39 +0100 <dminuoso> So while its not officially standardized, it is a defacto standard you can pretty much rely on
2022-11-25 08:34:54 +0100 <maerwald[m]> s/standard/practice/
2022-11-25 08:34:58 +0100 <dminuoso> fair
2022-11-25 08:34:59 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Ping timeout: 255 seconds)
2022-11-25 08:36:49 +0100 <dminuoso> maerwald[m]: their point regarding not using $PATH for setuid programs is valid, however.
2022-11-25 08:37:02 +0100 <dminuoso> and their implementation of --with-bash seems to be absolutely adequate
2022-11-25 08:37:06 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 08:42:07 +0100 <maerwald[m]> Yeah, but can you expect app developers to keep intricacies of random distributions in mind?
2022-11-25 08:42:46 +0100 <maerwald[m]> Making everything configurable can be a nuisance
2022-11-25 08:44:05 +0100 <dminuoso> Not really, I think this the kind of thing where a nixos person should just upstream it and say "hey we would like to introduce this change to make it compatible with ours"
2022-11-25 08:44:09 +0100 <dminuoso> And I think those problems are not an issue.
2022-11-25 08:44:25 +0100 <dminuoso> But python packages simply not declaring dependencies or having incorrect verion bounds..
2022-11-25 08:44:30 +0100 <dminuoso> There's no escuse for that.
2022-11-25 08:44:37 +0100 <dminuoso> It's the methodical "it works on my machine"
2022-11-25 08:45:05 +0100 <maerwald[m]> I remember developers being quite annoyed by gentoo devs sending CFLAGS patches everywhere, but the multilib architecture relied on it
2022-11-25 08:45:09 +0100ft(~ft@p508dbd59.dip0.t-ipconnect.de) (Quit: leaving)
2022-11-25 08:45:46 +0100 <dminuoso> I too have written haskell packages that strictly only work under linux, because I couldnt be bothered to support darwin or windows.
2022-11-25 08:45:50 +0100 <dminuoso> If someone wants that support, they can add it.
2022-11-25 08:46:17 +0100Major_Biscuit(~MajorBisc@86-88-79-148.fixed.kpn.net)
2022-11-25 08:46:19 +0100 <dminuoso> But at least the package will build reliably irrespective of whether you run cabal update or not
2022-11-25 08:47:03 +0100 <dminuoso> ($!) :: forall r a (b :: TYPE r). (a -> b) -> a -> b infixr 0
2022-11-25 08:47:07 +0100dminuosocries
2022-11-25 08:47:15 +0100 <dminuoso> Why was fixity messed up here too?
2022-11-25 08:47:23 +0100 <dminuoso> This should be infixl! :*
2022-11-25 08:47:35 +0100heisenberg2(~heisenber@104.28.255.10)
2022-11-25 08:48:22 +0100ChaiTRex(~ChaiTRex@user/chaitrex) (Remote host closed the connection)
2022-11-25 08:48:46 +0100ChaiTRex(~ChaiTRex@user/chaitrex)
2022-11-25 08:48:56 +0100heisenberg2(~heisenber@104.28.255.10) (Remote host closed the connection)
2022-11-25 08:49:28 +0100heisenberg2(~heisenber@104.28.255.10)
2022-11-25 08:50:35 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se) (Ping timeout: 264 seconds)
2022-11-25 08:52:57 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 08:54:32 +0100 <dminuoso> Would be so nice if you could just write `f a b c $! x y z`
2022-11-25 08:54:51 +0100 <dminuoso> And have it do the right thing.
2022-11-25 08:55:52 +0100heisenberg2(~heisenber@104.28.255.10) (Remote host closed the connection)
2022-11-25 08:57:08 +0100 <mauke> there's only one $! in that example. how does associativity come into it?
2022-11-25 08:57:09 +0100king_gs(~Thunderbi@187.201.139.206) (Read error: Connection reset by peer)
2022-11-25 08:57:54 +0100 <dminuoso> mauke: you are right mmm
2022-11-25 08:57:57 +0100 <c_wraith> I'd argue $! shouldn't be different from $. That'd just cause unnecessary confusion
2022-11-25 08:58:12 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
2022-11-25 08:58:27 +0100heisenberg2(~heisenber@104.28.255.10)
2022-11-25 08:58:30 +0100 <dminuoso> mauke: `f a b c $! x $! y $! z`
2022-11-25 08:59:15 +0100fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
2022-11-25 08:59:28 +0100darchitect(~darchitec@2a00:23c6:3584:df01:dc79:ce08:25b8:80df) (Quit: WeeChat 3.6)
2022-11-25 08:59:53 +0100darchitect(~darchitec@2a00:23c6:3584:df01:dc79:ce08:25b8:80df)
2022-11-25 09:03:11 +0100fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Remote host closed the connection)
2022-11-25 09:03:16 +0100darchitect(~darchitec@2a00:23c6:3584:df01:dc79:ce08:25b8:80df) (Client Quit)
2022-11-25 09:03:22 +0100fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7)
2022-11-25 09:03:22 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 09:04:37 +0100jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se)
2022-11-25 09:06:27 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c8be:9533:986e:aefa)
2022-11-25 09:08:52 +0100heisenberg2(~heisenber@104.28.255.10) (Remote host closed the connection)
2022-11-25 09:14:10 +0100 <mauke> btw, I wrote a little irssi script to translate `code markup` (monospace) coming from the matrix bridge to white text on dark gray background
2022-11-25 09:19:59 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 264 seconds)
2022-11-25 09:21:07 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 09:22:09 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-11-25 09:22:41 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 09:23:45 +0100califax(~califax@user/califx)
2022-11-25 09:25:32 +0100califax(~califax@user/califx) (Remote host closed the connection)
2022-11-25 09:27:06 +0100califax(~califax@user/califx)
2022-11-25 09:30:33 +0100shriekingnoise(~shrieking@186.137.167.202) (Quit: Quit)
2022-11-25 09:36:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 09:36:48 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 265 seconds)
2022-11-25 09:39:17 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 09:40:55 +0100michalz(~michalz@185.246.207.197)
2022-11-25 09:41:48 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Remote host closed the connection)
2022-11-25 09:42:07 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
2022-11-25 09:47:03 +0100acidjnk(~acidjnk@p200300d6e7137a67f01158a637cc3bb0.dip0.t-ipconnect.de)
2022-11-25 09:51:08 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-25 09:57:47 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Ping timeout: 264 seconds)
2022-11-25 09:59:14 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-25 10:00:56 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 10:03:43 +0100razetime(~quassel@117.254.35.74)
2022-11-25 10:03:47 +0100Guest8573(~marc@5.83.191.93) (Ping timeout: 264 seconds)
2022-11-25 10:09:08 +0100chele(~chele@user/chele)
2022-11-25 10:09:19 +0100chexum_(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-11-25 10:09:59 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 10:11:21 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Quit: king_gs)
2022-11-25 10:11:31 +0100king_gs1(~Thunderbi@187.201.139.206)
2022-11-25 10:12:17 +0100cfricke(~cfricke@user/cfricke)
2022-11-25 10:13:49 +0100king_gs1king_gs
2022-11-25 10:18:57 +0100andreabedini(~andreabed@2403-580e-db5b-2-caba-a840-d1de-5925.ip6.aussiebb.net)
2022-11-25 10:21:41 +0100Feuermagier_(~Feuermagi@2a02:2488:4211:3400:6419:933b:46e0:8942)
2022-11-25 10:21:41 +0100Feuermagier_(~Feuermagi@2a02:2488:4211:3400:6419:933b:46e0:8942) (Client Quit)
2022-11-25 10:21:42 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe)
2022-11-25 10:21:43 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 10:21:51 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 10:30:57 +0100king_gs(~Thunderbi@187.201.139.206) (Read error: Connection reset by peer)
2022-11-25 10:31:05 +0100king_gs1(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924)
2022-11-25 10:33:15 +0100raehik(~raehik@92.40.170.83.threembb.co.uk)
2022-11-25 10:33:23 +0100king_gs1king_gs
2022-11-25 10:35:12 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-25 10:35:57 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-11-25 10:38:11 +0100king_gs(~Thunderbi@2806:103e:29:bfeb:c988:bbd5:2586:4924) (Ping timeout: 265 seconds)
2022-11-25 10:38:25 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 10:42:43 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
2022-11-25 10:42:51 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 10:44:46 +0100zant(~zant@62.214.20.26)
2022-11-25 10:45:32 +0100mmhat(~mmh@p200300f1c70102d5ee086bfffe095315.dip0.t-ipconnect.de)
2022-11-25 10:48:07 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd) (Remote host closed the connection)
2022-11-25 10:50:25 +0100raehik(~raehik@92.40.170.83.threembb.co.uk) (Ping timeout: 268 seconds)
2022-11-25 10:52:30 +0100raehik(~raehik@92.40.212.239.threembb.co.uk)
2022-11-25 10:57:11 +0100raehik(~raehik@92.40.212.239.threembb.co.uk) (Ping timeout: 264 seconds)
2022-11-25 10:58:11 +0100andreabedini(~andreabed@2403-580e-db5b-2-caba-a840-d1de-5925.ip6.aussiebb.net) (Quit: WeeChat 3.7.1)
2022-11-25 10:59:15 +0100raehik(~raehik@92.40.170.15.threembb.co.uk)
2022-11-25 10:59:16 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 10:59:47 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 11:03:43 +0100king_gs(~Thunderbi@187.201.139.206) (Ping timeout: 260 seconds)
2022-11-25 11:04:40 +0100tdammers(~tdammers@77.109.72.175.res.static.edpnet.net) (Quit: WeeChat 3.0)
2022-11-25 11:13:45 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 11:18:47 +0100xff0x(~xff0x@125x103x176x34.ap125.ftth.ucom.ne.jp) (Ping timeout: 264 seconds)
2022-11-25 11:24:07 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net) (Quit: zzz)
2022-11-25 11:26:26 +0100lisbeths(uid135845@id-135845.lymington.irccloud.com) (Quit: Connection closed for inactivity)
2022-11-25 11:27:59 +0100econo(uid147250@user/econo) (Quit: Connection closed for inactivity)
2022-11-25 11:27:59 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 11:30:10 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 256 seconds)
2022-11-25 11:30:48 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 11:31:08 +0100mmhat(~mmh@p200300f1c70102d5ee086bfffe095315.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-11-25 11:32:48 +0100king_gs(~Thunderbi@187.201.139.206) (Ping timeout: 265 seconds)
2022-11-25 11:32:53 +0100raehik(~raehik@92.40.170.15.threembb.co.uk) (Ping timeout: 260 seconds)
2022-11-25 11:33:47 +0100jmdaemon(~jmdaemon@user/jmdaemon) (Ping timeout: 264 seconds)
2022-11-25 11:35:21 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Client Quit)
2022-11-25 11:36:44 +0100ec_(~ec@gateway/tor-sasl/ec)
2022-11-25 11:37:27 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 11:37:41 +0100ec(~ec@gateway/tor-sasl/ec) (Ping timeout: 255 seconds)
2022-11-25 11:38:48 +0100Sgeo(~Sgeo@user/sgeo) (Read error: Connection reset by peer)
2022-11-25 11:40:04 +0100Me-me(~Me-me@user/me-me) (Quit: Going offline, see ya! (www.adiirc.com))
2022-11-25 11:45:52 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 11:46:54 +0100nate4(~nate@98.45.169.16)
2022-11-25 11:48:35 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd)
2022-11-25 11:52:08 +0100nate4(~nate@98.45.169.16) (Ping timeout: 260 seconds)
2022-11-25 11:53:05 +0100king_gs(~Thunderbi@187.201.139.206) (Quit: king_gs)
2022-11-25 11:53:18 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd) (Ping timeout: 260 seconds)
2022-11-25 11:53:23 +0100king_gs(~Thunderbi@187.201.139.206)
2022-11-25 11:53:59 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-11-25 11:55:59 +0100teo(~teo@user/teo)
2022-11-25 12:00:47 +0100king_gs(~Thunderbi@187.201.139.206) (Ping timeout: 264 seconds)
2022-11-25 12:10:04 +0100xff0x(~xff0x@2405:6580:b080:900:84a4:3e04:c05a:9d80)
2022-11-25 12:13:15 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-25 12:22:34 +0100 <kjlid[m]> Is it possible to tell cabal install to include a file when building? I am using file-embed-lzma and it finds the while when I run cabal build but not when I run cabal install
2022-11-25 12:25:36 +0100sawilagar(~sawilagar@user/sawilagar)
2022-11-25 12:29:50 +0100teo(~teo@user/teo) (Ping timeout: 265 seconds)
2022-11-25 12:30:52 +0100teo(~teo@user/teo)
2022-11-25 12:31:06 +0100void_(~void@89.151.44.90)
2022-11-25 12:31:07 +0100VOID418(~user@89.151.44.90)
2022-11-25 12:31:16 +0100void_(~void@89.151.44.90) (Client Quit)
2022-11-25 12:34:35 +0100nilradical(~nilradica@user/naso)
2022-11-25 12:35:39 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
2022-11-25 12:35:48 +0100 <maerwald[m]> kjlid: yes
2022-11-25 12:35:54 +0100 <Dominik[m]1> I think so: https://cabal.readthedocs.io/en/stable/cabal-package.html#pkg-field-data-files
2022-11-25 12:36:20 +0100 <maerwald[m]> https://cabal.readthedocs.io/en/3.4/cabal-package.html?highlight=extra-source-files#pkg-field-extr…
2022-11-25 12:36:43 +0100 <Dominik[m]1> I do not think it is the source files, but the data files.
2022-11-25 12:37:11 +0100 <maerwald[m]> data files are for runtime
2022-11-25 12:37:17 +0100 <maerwald[m]> They are inlining the file
2022-11-25 12:37:19 +0100 <Dominik[m]1> isn't that what he is asking
2022-11-25 12:37:25 +0100 <Dominik[m]1> ah the other way around
2022-11-25 12:37:31 +0100 <Dominik[m]1> sorry
2022-11-25 12:37:31 +0100 <maerwald[m]> No
2022-11-25 12:38:45 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-25 12:38:50 +0100 <Dominik[m]1> ya it was misleading, because "Is it possible to tell `cabal install` to include a file when building" :-).
2022-11-25 12:39:02 +0100 <kjlid[m]> Okay so I'm an idiot. I actually tried extra-source-files earlier but it didn't work because obviously I put it in the wrong place in the cabal file
2022-11-25 12:39:04 +0100 <kjlid[m]> Now it works
2022-11-25 12:39:19 +0100 <kjlid[m]> Thanks!
2022-11-25 12:42:04 +0100 <maerwald[m]> extra-source-files should also work with TH, knowing that it needs to rebuild when it changes
2022-11-25 12:44:37 +0100 <mauke> hell yeah. my "monospace" hack works: https://i.ibb.co/Pry5wK4/Screenshot-2022-11-25-12-42-38.png
2022-11-25 12:46:04 +0100nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-11-25 12:46:21 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 12:46:41 +0100nilradical(~nilradica@user/naso)
2022-11-25 12:47:37 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 12:48:08 +0100zant(~zant@62.214.20.26) (Ping timeout: 260 seconds)
2022-11-25 12:51:42 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 12:51:47 +0100nilradical(~nilradica@user/naso) (Ping timeout: 264 seconds)
2022-11-25 12:53:58 +0100mestre(~mestre@191.177.185.178)
2022-11-25 12:54:06 +0100 <carbolymer> mauke: noice
2022-11-25 12:55:17 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 12:56:49 +0100VOID418(~user@89.151.44.90) (Remote host closed the connection)
2022-11-25 12:57:05 +0100VOID418(~user@89.151.44.90)
2022-11-25 12:57:27 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz) (Ping timeout: 268 seconds)
2022-11-25 12:59:48 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 260 seconds)
2022-11-25 13:00:26 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 13:01:52 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 13:17:34 +0100bjourne(~bjourne@2001:6b0:1:1140:42bf:ff4:f8fa:50e5)
2022-11-25 13:19:37 +0100nilradical(~nilradica@user/naso)
2022-11-25 13:24:24 +0100VOID[m](~void404ma@2001:470:69fc:105::2:c72c)
2022-11-25 13:24:53 +0100nilradical(~nilradica@user/naso) (Ping timeout: 260 seconds)
2022-11-25 13:26:32 +0100sawilagar(~sawilagar@user/sawilagar) (Read error: Connection reset by peer)
2022-11-25 13:27:56 +0100sawilagar(~sawilagar@user/sawilagar)
2022-11-25 13:35:26 +0100ft(~ft@p508dbd59.dip0.t-ipconnect.de)
2022-11-25 13:36:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 13:38:36 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-25 13:44:50 +0100zant(~zant@62.96.232.178)
2022-11-25 13:46:24 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542)
2022-11-25 13:52:58 +0100elevenkb(~elevenkb@105.184.125.168) (Ping timeout: 265 seconds)
2022-11-25 13:55:38 +0100nilradical(~nilradica@user/naso)
2022-11-25 13:56:56 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-25 14:00:42 +0100nilradical(~nilradica@user/naso) (Ping timeout: 265 seconds)
2022-11-25 14:02:09 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net) (Ping timeout: 265 seconds)
2022-11-25 14:03:30 +0100mestre(~mestre@191.177.185.178) (Quit: leaving)
2022-11-25 14:06:18 +0100Erutuon(~Erutuon@user/erutuon) (Ping timeout: 260 seconds)
2022-11-25 14:08:16 +0100heisenberg2(~heisenber@2a09:bac1:3f40::16:19a)
2022-11-25 14:11:04 +0100elevenkb(~elevenkb@105.184.125.168)
2022-11-25 14:17:20 +0100acidjnk(~acidjnk@p200300d6e7137a67f01158a637cc3bb0.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-25 14:21:24 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 14:21:30 +0100 <dminuoso> maerwald[m]: Mmm. I think its time to finally kick off monad-logger-core :S
2022-11-25 14:21:50 +0100 <dminuoso> That depends only on unliftio-core and bytestrings.
2022-11-25 14:22:26 +0100 <dminuoso> The unfortunate reality with orphan instances might make it hard to split the actual monad-logger package however.
2022-11-25 14:23:11 +0100 <dminuoso> Given that there's instances like `MonadLogger m => MonadLogger (Pipe l i o u m)`
2022-11-25 14:23:28 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 14:24:59 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 14:25:07 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 14:25:38 +0100Kaiepi(~Kaiepi@108.175.84.104) (Remote host closed the connection)
2022-11-25 14:25:44 +0100 <maerwald_> dminuoso: have you seen https://github.com/input-output-hk/iohk-monitoring-framework
2022-11-25 14:26:02 +0100Kaiepi(~Kaiepi@108.175.84.104)
2022-11-25 14:26:20 +0100 <maerwald_> at first, I wasn't sure if this is a java framework
2022-11-25 14:26:35 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 14:26:40 +0100 <dminuoso> maerwald_: Yeah its a bit crazy.
2022-11-25 14:26:56 +0100 <dminuoso> The disturbing thing is, we already have a uniform and adaptable mechanism to ship logs
2022-11-25 14:27:04 +0100 <dminuoso> `man 3 syslog`
2022-11-25 14:27:18 +0100 <dminuoso> Which nicely connects to systemd, and you can do all kinds of fancy redirects with that.
2022-11-25 14:27:49 +0100 <dminuoso> On our clusters, we just run promtail on every node, collecting from journald and shoving it into loki. *shrugs*
2022-11-25 14:28:06 +0100 <dminuoso> Software is blissfully unaware.
2022-11-25 14:28:12 +0100 <hpc> syslog connects to just about everything
2022-11-25 14:28:52 +0100pavonia(~user@user/siracusa) (Read error: Connection reset by peer)
2022-11-25 14:29:13 +0100 <dminuoso> maerwald_: that diagram on iohk-monitoring-framework looks like the twitter architecutre.
2022-11-25 14:29:15 +0100maerwald_(~maerwald@mail.hasufell.de) (Changing host)
2022-11-25 14:29:15 +0100maerwald_(~maerwald@user/maerwald)
2022-11-25 14:29:22 +0100 <maerwald_> lol
2022-11-25 14:29:25 +0100 <dminuoso> Maybe it can run twitter? :S
2022-11-25 14:30:12 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-25 14:30:17 +0100 <maerwald_> you think Elon was involved?
2022-11-25 14:30:24 +0100maerwald_maerwald
2022-11-25 14:31:23 +0100 <maerwald> anyway... my point is... either logging libs are over-engineered or too simplistic and writing my own is easier than trying to use the API
2022-11-25 14:31:43 +0100 <hpc> https://hackage.haskell.org/package/hslogger-1.3.1.0 seems to have a nice api
2022-11-25 14:31:51 +0100 <dminuoso> monad-logger in principle is great because it makes the problem someone elses problem.
2022-11-25 14:32:03 +0100pavonia(~user@user/siracusa)
2022-11-25 14:32:11 +0100 <dminuoso> and if Im writing executable code, it all goes into syslog.
2022-11-25 14:32:16 +0100 <hpc> (ignoring the global state, at least...)
2022-11-25 14:33:46 +0100 <maerwald> yeah... composition is really hard once you go beyond function level
2022-11-25 14:34:55 +0100 <maerwald> "everything is a file" wasn't too bad an attempt of solving it
2022-11-25 14:35:05 +0100marc(~marc@5.83.191.93)
2022-11-25 14:35:06 +0100 <maerwald> because you have universal primitives
2022-11-25 14:35:10 +0100 <maerwald> read and write, lol
2022-11-25 14:35:29 +0100marcGuest3723
2022-11-25 14:36:05 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 14:36:25 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 14:37:01 +0100 <darkling> It's the same kind of principle as REST: have a small number of common verbs, and a large number of resources you can manipulate with those verbs.
2022-11-25 14:37:13 +0100machined1od(~machinedg@d198-53-218-113.abhsia.telus.net)
2022-11-25 14:37:22 +0100 <dminuoso> darkling: Im willing to bet most people that use the word REST dont know what they're talking about.
2022-11-25 14:37:50 +0100 <darkling> Yeah. I mean actual REST, not the bastardised HTTP-JSON-RPC that passes for it these days.
2022-11-25 14:37:53 +0100machinedgod(~machinedg@d198-53-218-113.abhsia.telus.net) (Read error: Connection reset by peer)
2022-11-25 14:37:54 +0100 <dminuoso> Virtually everything dubbed as "REST" is not REST.
2022-11-25 14:38:11 +0100 <darkling> My co-workers get this lecture at regular intervals. :)
2022-11-25 14:38:23 +0100 <dminuoso> Did you hand them Fieldings PhD thesis?
2022-11-25 14:38:27 +0100 <darkling> Yes.
2022-11-25 14:38:29 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 14:38:33 +0100 <dminuoso> Nice!
2022-11-25 14:40:08 +0100 <albet70> could do notation be used in lambda?
2022-11-25 14:40:29 +0100 <geekosaur> if it has the right type
2022-11-25 14:40:31 +0100 <dminuoso> albet70: a do-expression can be used in every place an expression is expected.
2022-11-25 14:40:35 +0100 <dminuoso> syntactically, at least.
2022-11-25 14:40:36 +0100 <geekosaur> otherwise, what's the point?
2022-11-25 14:40:42 +0100 <albet70> ok
2022-11-25 14:41:00 +0100 <dminuoso> which is why they're also called do-expressions. :)
2022-11-25 14:41:35 +0100 <dminuoso> Here's a cute demonstration of that fact:
2022-11-25 14:41:38 +0100 <mauke> > concatMap (\x -> do y <- [x, x * 10, x * 100]; return y) [4, 5, 6]
2022-11-25 14:41:39 +0100 <lambdabot> [4,40,400,5,50,500,6,60,600]
2022-11-25 14:41:41 +0100 <dminuoso> % let a :: Int; a = do 1
2022-11-25 14:41:41 +0100 <yahb2> <no output>
2022-11-25 14:41:55 +0100 <dminuoso> See? You can even use this outside of monadic code!
2022-11-25 14:42:31 +0100 <mauke> > do (do print) (do "hello, world")
2022-11-25 14:42:33 +0100 <lambdabot> <IO ()>
2022-11-25 14:42:36 +0100 <dminuoso> What is curious however:
2022-11-25 14:42:37 +0100 <mauke> well, I tried
2022-11-25 14:42:40 +0100 <dminuoso> % let a :: Int; a = do (do 1)
2022-11-25 14:42:40 +0100 <yahb2> <no output>
2022-11-25 14:43:17 +0100 <dminuoso> can even leave the parens away to test whether your coworkers really do read your pull requests.
2022-11-25 14:43:22 +0100 <dminuoso> % let a :: Int; a = do do do 1
2022-11-25 14:43:22 +0100 <yahb2> <no output>
2022-11-25 14:43:36 +0100 <mauke> that proves 'do' is idempotent
2022-11-25 14:44:19 +0100 <mauke> just like 'die' in Perl
2022-11-25 14:44:25 +0100 <dminuoso> With acme-dont, you can even write: don't do launchMissiles
2022-11-25 14:44:28 +0100 <mauke> it's a "do or die" thing
2022-11-25 14:45:10 +0100 <mauke> what a coincidence: https://metacpan.org/pod/Acme::Don::t
2022-11-25 14:45:57 +0100 <dminuoso> perl has by far the best acme ideas.
2022-11-25 14:46:00 +0100 <hpc> haskell's entire acme thing comes from perl
2022-11-25 14:46:05 +0100 <dminuoso> My all time favourite is Acme::EyeDrops
2022-11-25 14:46:39 +0100 <hpc> acme-schoenfinkel is my favorite
2022-11-25 14:46:41 +0100 <bjourne> i have a "processing pipeline" consisting of a few functions that return maybes
2022-11-25 14:46:50 +0100 <hpc> just for the pun at the end
2022-11-25 14:47:00 +0100 <bjourne> is there a nicer way to "run" this pipleline than nested cases that match on Just and Nothing?
2022-11-25 14:47:26 +0100 <dminuoso> hpc: Oh I love those. hässlich :: Schoenfinkel cat => cat a (cat b c) -> cat (a, b) c
2022-11-25 14:47:32 +0100 <dminuoso> What a cute pun
2022-11-25 14:47:58 +0100 <mauke> bjourne: >>= or do notation?
2022-11-25 14:48:09 +0100 <geekosaur> bjourne, if you're just looking for a Just/Nothing at the end, use the Monad instance
2022-11-25 14:48:38 +0100nilradical(~nilradica@user/naso)
2022-11-25 14:49:45 +0100 <bjourne> it's not sufficient since i need to print potential errors from each function
2022-11-25 14:50:37 +0100 <dminuoso> bjourne: You can use `Either Err` then instead.
2022-11-25 14:50:48 +0100 <dminuoso> In the Left case, just print (say to stderr)
2022-11-25 14:51:26 +0100 <bjourne> no, the functions are Maybe
2022-11-25 14:53:09 +0100nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-11-25 14:56:11 +0100 <dminuoso> Maybe is not a function type. Can you be more explicit?
2022-11-25 14:58:16 +0100 <albet70> >>= this reverse is <<= or =<<?
2022-11-25 14:59:18 +0100 <albet70> =<<
2022-11-25 14:59:26 +0100 <bjourne> dminuoso: { e1 = f0(e0) if (e1 == null) dieWith "f0 failed" e2 = f1(e1) if (e2 == null) dieWith "f1 failed" ... return e5 }
2022-11-25 14:59:50 +0100 <dminuoso> bjourne: Is it of type `... S -> IO (Maybe T)` ?
2022-11-25 15:00:29 +0100 <bjourne> no
2022-11-25 15:00:51 +0100 <dminuoso> bjourne: that does not read like valid Haskell code.
2022-11-25 15:01:00 +0100 <dminuoso> Can you please share the real code and not some pseudo code?
2022-11-25 15:01:03 +0100nilradical(~nilradica@user/naso)
2022-11-25 15:01:23 +0100elevenkb(~elevenkb@105.184.125.168) (Read error: Connection reset by peer)
2022-11-25 15:02:26 +0100 <bjourne> i can't. but that's the code's structure
2022-11-25 15:02:37 +0100heisenberg2(~heisenber@2a09:bac1:3f40::16:19a) (Remote host closed the connection)
2022-11-25 15:06:53 +0100cfricke(~cfricke@user/cfricke) (Quit: WeeChat 3.7.1)
2022-11-25 15:08:18 +0100 <albet70> how to break long line code? with \?
2022-11-25 15:09:57 +0100 <hpc> you don't need to, you can just use newlines and layout
2022-11-25 15:10:09 +0100 <hpc> if you have some long expression "foo bar baz", you can write
2022-11-25 15:10:09 +0100 <hpc> foo
2022-11-25 15:10:10 +0100 <hpc> bar
2022-11-25 15:10:11 +0100 <hpc> baz
2022-11-25 15:10:15 +0100 <hpc> or something along those lines
2022-11-25 15:10:19 +0100 <albet70> hpc, but what about the indent?
2022-11-25 15:10:20 +0100 <hpc> it's pretty flexible
2022-11-25 15:10:32 +0100 <albet70> could it be wrong with the indent? in do notation
2022-11-25 15:11:12 +0100 <pavonia> You just indent the broken lines futher
2022-11-25 15:11:21 +0100 <hpc> it's like any indentation, as long as it's not aligned with the start of "foo" it'll know it's not another line yet
2022-11-25 15:11:59 +0100 <albet70> like this one https://paste.tomsmeding.com/0t0nbzGY
2022-11-25 15:12:13 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 260 seconds)
2022-11-25 15:12:30 +0100 <albet70> line 219 is too long
2022-11-25 15:13:02 +0100 <dminuoso> bjourne: That is not valid code structure, it is not even remotely syntactically valid haskell
2022-11-25 15:13:17 +0100 <dminuoso> I cant even guess at what that is trying to convey.
2022-11-25 15:13:32 +0100Unicorn_Princess(~Unicorn_P@user/Unicorn-Princess/x-3540542) (Remote host closed the connection)
2022-11-25 15:13:48 +0100AlexNoo_(~AlexNoo@94.233.240.159)
2022-11-25 15:13:57 +0100srz(~srz@devil.dm.uba.ar)
2022-11-25 15:16:48 +0100akegalj(~akegalj@93-139-151-182.adsl.net.t-com.hr)
2022-11-25 15:17:01 +0100Alex_test(~al_test@178.34.163.201) (Ping timeout: 252 seconds)
2022-11-25 15:17:26 +0100AlexZenon(~alzenon@178.34.163.201) (Ping timeout: 268 seconds)
2022-11-25 15:17:49 +0100AlexNoo(~AlexNoo@178.34.163.201) (Ping timeout: 260 seconds)
2022-11-25 15:18:30 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 15:18:41 +0100 <mauke> :t maybe
2022-11-25 15:18:42 +0100 <lambdabot> b -> (a -> b) -> Maybe a -> b
2022-11-25 15:19:47 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 15:20:19 +0100 <mauke> bjourne: in the absence of any context, maybe something like: e1 <- maybe (dieWith "f0 failed") pure (f0 e0); e2 <- maybe (dieWith "f1 failed") pure (f1 e1); ...
2022-11-25 15:20:30 +0100 <mauke> :t fromMaybe
2022-11-25 15:20:31 +0100 <lambdabot> a -> Maybe a -> a
2022-11-25 15:21:05 +0100 <mauke> or even: let e1 = fromMaybe (error "f0 failed") (f0 e0); etc.
2022-11-25 15:22:13 +0100jao(~jao@cpc103048-sgyl39-2-0-cust502.18-2.cable.virginm.net)
2022-11-25 15:22:28 +0100 <bjourne> what is pure here?
2022-11-25 15:22:32 +0100Alex_test(~al_test@94.233.240.159)
2022-11-25 15:22:35 +0100 <hpc> :t pure
2022-11-25 15:22:37 +0100 <lambdabot> Applicative f => a -> f a
2022-11-25 15:22:53 +0100AlexZenon(~alzenon@94.233.240.159)
2022-11-25 15:24:41 +0100 <bjourne> i solved it like this: tokens <- maybe (Left ("Tokenization error", ExitFailure 1)) Right $ tokenize line
2022-11-25 15:24:57 +0100 <bjourne> not ideal to have to repeat Left and Right all the time though
2022-11-25 15:25:09 +0100 <dminuoso> bjourne: Define yourself a function called `note :: a -> Maybe b -> Either a b`
2022-11-25 15:25:33 +0100 <dminuoso> Then you can just write `r <- note "Tokenization error" (tokenize line)` ...
2022-11-25 15:25:52 +0100 <dminuoso> And the ExitFailure you should best just skip, its poor coupling
2022-11-25 15:25:59 +0100 <mauke> :t maybe (Left ("Tokenization error", ExitFailure 1)) Right
2022-11-25 15:26:00 +0100 <lambdabot> error:
2022-11-25 15:26:00 +0100 <lambdabot> Data constructor not in scope: ExitFailure :: t0 -> b1
2022-11-25 15:26:08 +0100 <mauke> ah
2022-11-25 15:26:17 +0100 <dminuoso> If you want distinct exit codes, use an ADT to encode different failure conditions `data Err = TokError | FooError`, and scrutinize on that later
2022-11-25 15:26:57 +0100 <mauke> :t maybe (Left ("Tokenization error", System.Exit.ExitFailure 1)) Right
2022-11-25 15:26:59 +0100 <lambdabot> Maybe b -> Either ([Char], GHC.IO.Exception.ExitCode) b
2022-11-25 15:27:08 +0100 <mauke> yeah, that's a bit hairy
2022-11-25 15:27:47 +0100 <dminuoso> % note :: a -> Maybe b -> Either a b; note a = maybe (Left a) Right
2022-11-25 15:27:47 +0100 <yahb2> <no output>
2022-11-25 15:28:05 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex) (Ping timeout: 255 seconds)
2022-11-25 15:28:18 +0100 <dminuoso> That's one of those utiltiy functions I find myself using in every project, though sometimes with flipped arguments, sometimes slightly different types..
2022-11-25 15:28:53 +0100malte(~malte@mal.tc) (Remote host closed the connection)
2022-11-25 15:28:55 +0100 <mauke> @pl \a -> maybe (Left a) Right
2022-11-25 15:28:56 +0100 <lambdabot> flip maybe Right . Left
2022-11-25 15:29:00 +0100 <mauke> ... no.
2022-11-25 15:29:56 +0100malte(~malte@mal.tc)
2022-11-25 15:30:45 +0100bitdex(~bitdex@gateway/tor-sasl/bitdex)
2022-11-25 15:34:31 +0100dsrt^(~dsrt@76.145.185.103) (Remote host closed the connection)
2022-11-25 15:37:35 +0100 <nilradical> how can i get rid of these annoying warnings (macos13) :
2022-11-25 15:37:40 +0100 <nilradical> ld: warning: directory not found for option '-L/opt/local/lib/'
2022-11-25 15:37:41 +0100 <nilradical> ld: warning: directory not found for option '-L/usr/local/lib/'
2022-11-25 15:37:41 +0100 <nilradical> ld: warning: -undefined dynamic_lookup may not work with chained fixups
2022-11-25 15:41:27 +0100kenran(~user@user/kenran)
2022-11-25 15:42:18 +0100kenran(~user@user/kenran) (Remote host closed the connection)
2022-11-25 15:43:00 +0100 <bjourne> dminuoso: that's reasonable but i would have expected haskell to have something a little more general
2022-11-25 15:43:00 +0100shriekingnoise(~shrieking@186.137.167.202)
2022-11-25 15:44:45 +0100razetime(~quassel@117.254.35.74) (Remote host closed the connection)
2022-11-25 15:47:28 +0100nilradical(~nilradica@user/naso) (Remote host closed the connection)
2022-11-25 15:47:47 +0100nilradical(~nilradica@user/naso)
2022-11-25 15:48:26 +0100nate4(~nate@98.45.169.16)
2022-11-25 15:51:34 +0100 <albet70> why there's no isEmpty for list?
2022-11-25 15:52:12 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd)
2022-11-25 15:52:29 +0100 <[exa]> albet70: `null` ?
2022-11-25 15:53:15 +0100 <albet70> yes, null can check empty list, but why the name isn't isEmpty
2022-11-25 15:53:49 +0100nate4(~nate@98.45.169.16) (Ping timeout: 268 seconds)
2022-11-25 15:54:19 +0100 <mauke> :kneeling_warthog:
2022-11-25 15:55:24 +0100 <geekosaur> you perhaps haven't noticed that Haskell stuff has mathy names?
2022-11-25 15:56:42 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd) (Ping timeout: 265 seconds)
2022-11-25 15:56:58 +0100 <mauke> similarly, getUniqueElements is called "nub"
2022-11-25 16:01:48 +0100sawilagar(~sawilagar@user/sawilagar) (Ping timeout: 260 seconds)
2022-11-25 16:02:11 +0100 <hpc> and map is called... map
2022-11-25 16:02:15 +0100 <hpc> i mean fmap
2022-11-25 16:02:17 +0100 <hpc> i mean (.)
2022-11-25 16:02:21 +0100 <hpc> :P
2022-11-25 16:03:05 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2022-11-25 16:03:05 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2022-11-25 16:03:05 +0100wroathe(~wroathe@user/wroathe)
2022-11-25 16:04:20 +0100 <geekosaur> and before haskell98 map was the instance method for Functor. then they decided the one for lists should be monomorphic to help newcomers, and the Functor one became fmap
2022-11-25 16:04:20 +0100 <albet70> hpc, right! and reduce is called foldl1
2022-11-25 16:08:14 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 16:10:31 +0100manwithluck(~manwithlu@194.177.28.176) (Read error: Connection reset by peer)
2022-11-25 16:13:29 +0100manwithluck(~manwithlu@194.177.28.176)
2022-11-25 16:17:00 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-11-25 16:17:28 +0100 <bjourne> but tragically, minimum of a list is actually called minimum and not infimum
2022-11-25 16:19:08 +0100chromoblob(~user@37.113.164.122)
2022-11-25 16:19:44 +0100 <mauke> that's different. minimum can't return elements that are not in the list
2022-11-25 16:19:54 +0100acidjnk(~acidjnk@p200300d6e7137a87e80cc9250548b2f9.dip0.t-ipconnect.de)
2022-11-25 16:23:46 +0100teo(~teo@user/teo) (Ping timeout: 265 seconds)
2022-11-25 16:27:23 +0100mvk(~mvk@2607:fea8:5ce3:8500::efb)
2022-11-25 16:29:19 +0100[Leary](~Leary]@user/Leary/x-0910699) (Remote host closed the connection)
2022-11-25 16:29:37 +0100[Leary](~Leary]@user/Leary/x-0910699)
2022-11-25 16:30:28 +0100mvk(~mvk@2607:fea8:5ce3:8500::efb) (Client Quit)
2022-11-25 16:30:49 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 268 seconds)
2022-11-25 16:33:18 +0100InstX1_(~Liam@2601:6c4:4081:54f0:e9f2:606c:4487:f118) (Ping timeout: 260 seconds)
2022-11-25 16:33:31 +0100raehik(~raehik@92.40.202.127.threembb.co.uk)
2022-11-25 16:33:41 +0100Inst(~Inst@2601:6c4:4081:54f0:681d:b835:8895:3ea8) (Ping timeout: 255 seconds)
2022-11-25 16:37:43 +0100LemanR(~LemanR@pool-74-109-28-147.phlapa.fios.verizon.net)
2022-11-25 16:42:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 16:43:17 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-11-25 16:44:46 +0100heisenberg2(~heisenber@2a09:bac1:3f60::16:19a)
2022-11-25 16:45:05 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 16:46:59 +0100tomboy64(~tomboy64@user/tomboy64) (Quit: Off to see the wizard.)
2022-11-25 16:49:48 +0100jakalx(~jakalx@base.jakalx.net) ()
2022-11-25 16:51:06 +0100nilradical(~nilradica@user/naso) ()
2022-11-25 16:53:28 +0100tomboy64(~tomboy64@user/tomboy64)
2022-11-25 16:54:52 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Ping timeout: 256 seconds)
2022-11-25 16:55:00 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 16:56:50 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 16:58:50 +0100justsomeguy(~justsomeg@user/justsomeguy)
2022-11-25 17:00:05 +0100steve[m](~stevetrou@2001:470:69fc:105::e0b) (Quit: You have been kicked for being idle)
2022-11-25 17:01:28 +0100srz(~srz@devil.dm.uba.ar) (Ping timeout: 265 seconds)
2022-11-25 17:02:01 +0100kuribas(~user@ptr-17d51emqj0opa703e0o.18120a2.ip6.access.telenet.be)
2022-11-25 17:03:22 +0100pavonia(~user@user/siracusa) (Quit: Bye!)
2022-11-25 17:05:38 +0100jinsl(~jinsl@2408:8207:2557:ce20:211:32ff:fec8:6aea) (Ping timeout: 256 seconds)
2022-11-25 17:05:49 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2022-11-25 17:05:49 +0100jinsl-(~jinsl@123.120.168.177)
2022-11-25 17:09:21 +0100heisenberg2(~heisenber@2a09:bac1:3f60::16:19a) (Remote host closed the connection)
2022-11-25 17:10:03 +0100 <LemanR> quick question for haskell users. I am watching tutorials for haskell and I understand why it is so elegant as a language. Is there another language that has taken "what makes haskell, haskell" and improved on it as computer science got more advanced a subject?
2022-11-25 17:10:08 +0100heisenberg2(~heisenber@2a09:bac1:3f60::16:19a)
2022-11-25 17:11:26 +0100 <geekosaur> depends on what you mean by "improved on"
2022-11-25 17:12:49 +0100 <geekosaur> Idris is more or less Haskell with dependent types. Clean is Haskell with uniqueness types. Curry is a logic language modeled on Haskell.
2022-11-25 17:13:42 +0100 <geekosaur> for that matter, ghc isn't static; with 9.0 we got linear types, although they're not integrated very well as yet
2022-11-25 17:13:49 +0100 <[exa]> LemanR: much of the research is usually put right into haskell
2022-11-25 17:14:01 +0100 <[exa]> for like 30-ish years now
2022-11-25 17:15:50 +0100 <kuribas> well, when it comes to type level computation, idris is more advanced than haskell.
2022-11-25 17:16:19 +0100 <kuribas> haskell type level computation is just a lot of hacks around HM inference and type classes.
2022-11-25 17:16:43 +0100 <LemanR> I guess I should be asking, was there any new language developed because there was potential to 'upgrading' haskell however it would require fundamental changes thus a new language? Something like that. Or like you, [exa] , point out that so far only haskell devs have improved haskell. kuribas I just got done typing this when I read your message so
2022-11-25 17:16:43 +0100 <LemanR> i guess I'll read now.
2022-11-25 17:17:12 +0100 <LemanR> * read about idris
2022-11-25 17:18:25 +0100 <bjourne> If you're on the clr F# is really nice
2022-11-25 17:19:03 +0100 <kuribas> LemanR: but you know, programming languages are not advancing on a single axis. There are many dimensions to it, so many languages can have different merits.
2022-11-25 17:19:50 +0100 <kuribas> LemanR: haskell has a production ready compiler, wealth of libraries, a rather large community, which you are not going to find in idris, agda, etc...
2022-11-25 17:19:58 +0100acidjnk(~acidjnk@p200300d6e7137a87e80cc9250548b2f9.dip0.t-ipconnect.de) (Ping timeout: 260 seconds)
2022-11-25 17:20:19 +0100ddellacosta(~ddellacos@89.45.224.188)
2022-11-25 17:20:26 +0100 <[exa]> LemanR: I'd kinda say that everyone's awaiting the killer new haskell and no can decide what to put in it. :D
2022-11-25 17:21:51 +0100 <[exa]> kuribas: btw AFAIK ghc actually discarded the "super-hacked HM inference" a long ago, now there's the constraint-solving typesystem over Fω
2022-11-25 17:22:05 +0100 <kuribas> [exa]: ah right :)
2022-11-25 17:22:07 +0100 <[exa]> there's a nice SPJ video from zurihac about that somewhere on youtube
2022-11-25 17:23:12 +0100 <LemanR> lol wait as in a haskell 2.0 or like a new language that is like what rust is to C++ atm. I'll leave all that type stuff or another day. Another motivator to learn haskell was that it would force me to think about elegant coding but more importantly what exactly I am doing insofar as types is concerned.
2022-11-25 17:23:26 +0100 <[exa]> LemanR: one kinda practical concern that drives the development this way is that it's much easier to add your random small improvement into ghc instead of redoing the whole compiler again
2022-11-25 17:25:29 +0100 <kuribas> LemanR: forcing you to think about elegant code is indeed the best thing you learn in haskell.
2022-11-25 17:25:57 +0100 <kuribas> LemanR: before haskell I was learning scheme, ruby, and ocaml, but I never really found my code elegant.
2022-11-25 17:26:11 +0100 <[exa]> (btw many people would love to have even a second haskell compiler (promotes standardization, avoids monoculture&cathedral-ish problems, ...), but anything except for ghc isn't really production-ready nowadays)
2022-11-25 17:26:25 +0100 <kuribas> haskell tought me to think about local state, and how to write higher level abstractions over complicated low level code.
2022-11-25 17:26:57 +0100srz(~srz@devil.dm.uba.ar)
2022-11-25 17:27:34 +0100 <kuribas> [exa]: idk, I prefer haskell monoculture over the scheme situation
2022-11-25 17:28:04 +0100econo(uid147250@user/econo)
2022-11-25 17:28:13 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) ()
2022-11-25 17:28:25 +0100 <LemanR> common lisp seems to have benefited form having a S*** ton of dialects then having a meeting of sorts to standardize. Maybe scheme will have the same benefit?
2022-11-25 17:28:54 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-25 17:29:32 +0100 <oak-> I thought Haskell has similar kind of history, there used to be different kinds of ML-languages or something along the lines
2022-11-25 17:30:26 +0100 <LemanR> well I better get coding. My first attempt as someone who's only watched a few tutorials at making a type for the data I'm working with (messing with neuron modeling, atm just reducing the amount of nodes a auto-tracer made)
2022-11-25 17:31:13 +0100 <kuribas> LemanR: common lisp was a compromise. And not an easy one.
2022-11-25 17:32:11 +0100 <geekosaur> oak-, Haskell isn't really an ML except in syntax. it staked out the purity+laziness area as its own
2022-11-25 17:32:19 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 17:32:30 +0100 <geekosaur> OCaml seems to have won the ML dialects war
2022-11-25 17:32:44 +0100 <kuribas> oak-: yeah, haskell was actually made by a committee.
2022-11-25 17:33:18 +0100 <kuribas> geekosaur: by on it's own you mean miranda and other languages?
2022-11-25 17:33:50 +0100 <geekosaur> well, Haskell was originally intended to free that arena from closed source limitations so more research could be done in the area
2022-11-25 17:33:55 +0100 <geekosaur> as I understand it
2022-11-25 17:36:35 +0100 <LemanR> before I go, any suggested resources that I can read/watch that will help me better understand coding from a computer science perspectives that goes beyond describing the jargon (polymorphism is x) as I've seen a lot of those? i think I have a strong grasp on many basic concepts but want to continue diving deeper as someone who isn't formally
2022-11-25 17:36:36 +0100 <LemanR> educated in CS
2022-11-25 17:37:04 +0100__monty__(~toonn@user/toonn)
2022-11-25 17:37:29 +0100 <geekosaur> tbh my resource for that was this channel 🙂
2022-11-25 17:37:43 +0100 <hpc> ^
2022-11-25 17:37:48 +0100 <hpc> i would just hang out and google things
2022-11-25 17:38:19 +0100 <hpc> you'll occasionally find a fun rabbit hole to go down, and come out of it with more context for everything else
2022-11-25 17:38:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 17:39:21 +0100 <hpc> don't limit yourself to traditionally programming-y math either, there's some good stuff down the algebra rabbit hole too
2022-11-25 17:39:23 +0100 <geekosaur> (I'm pretty much completely self-educated; my formal education was a semester of engineering FORTRAN)
2022-11-25 17:39:27 +0100 <hpc> everything's connected in some way
2022-11-25 17:39:28 +0100 <[exa]> kuribas: there's only one scheme though
2022-11-25 17:39:36 +0100 <[exa]> it just happens to have 54272934857923487 implementations
2022-11-25 17:39:38 +0100 <kuribas> I am self-educated as well
2022-11-25 17:40:09 +0100 <LemanR> so pretty much the linux journey but for programming :P btw my system is something to brag about I must say. I've left 'btw...i use arch' meme in the dust years ago lol a truely meta system.
2022-11-25 17:40:41 +0100 <LemanR> but that would be for chat channel before I rant.
2022-11-25 17:40:55 +0100 <LemanR> *for a chat channel*
2022-11-25 17:40:57 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:c8be:9533:986e:aefa) (Quit: WeeChat 2.8)
2022-11-25 17:41:05 +0100 <[exa]> I think arch rants are well accepted here
2022-11-25 17:41:09 +0100 <mauke> https://www.youtube.com/watch?v=H0Ek86IH-3Y
2022-11-25 17:41:35 +0100 <[exa]> given certain non-beneficial properties of ghc packaging there
2022-11-25 17:41:58 +0100 <LemanR> well my host system is actually gentoo and in this file system I mount a guest gentoo system or a debian. I haven't needed to add a arch system to this meta system yet but wouldn't be hard to.
2022-11-25 17:42:28 +0100 <LemanR> basically my own way of getting a bedrocks linux functionality.
2022-11-25 17:43:47 +0100 <LemanR> I'm lightly thinking about changing the host into a linux from scratch that specializes at just being a great host system but I can't seriously think about this until maybe summer.
2022-11-25 17:49:42 +0100 <[exa]> maybe try nix?
2022-11-25 17:50:05 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2022-11-25 17:50:05 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2022-11-25 17:50:05 +0100wroathe(~wroathe@user/wroathe)
2022-11-25 17:50:17 +0100zant(~zant@62.96.232.178) (Ping timeout: 265 seconds)
2022-11-25 17:52:53 +0100 <hpc> emphasis on "try", they've been improving how you interact with it but there's still a lot of inconsistency
2022-11-25 17:52:59 +0100 <hpc> it's kind of like learning the git cli, but moreso
2022-11-25 17:53:35 +0100srz(~srz@devil.dm.uba.ar) (Ping timeout: 264 seconds)
2022-11-25 17:53:51 +0100 <LemanR> not sure about nix but my last attempts at a nix system were fairly bad (but I was more novice then)
2022-11-25 17:53:56 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net)
2022-11-25 17:54:07 +0100fserucas(~fserucas@2001:818:e376:a400:fb92:70c1:dd88:c7d7) (Quit: Leaving)
2022-11-25 17:54:12 +0100 <hpc> (although nixos was also in the mix for me)
2022-11-25 17:54:23 +0100 <hpc> maybe standalone nix is better
2022-11-25 17:54:45 +0100 <dsal> nixos sometimes becomes gentoo when you get to rebuild the whole system to upgrade cat.
2022-11-25 17:54:50 +0100manwithluck(~manwithlu@194.177.28.176) (Read error: Connection reset by peer)
2022-11-25 17:55:10 +0100 <dsal> I've managed to avoid understanding nix for the most part, but I do like my nixos boxes.
2022-11-25 17:58:17 +0100manwithluck(~manwithlu@194.177.28.176)
2022-11-25 17:58:59 +0100raehik(~raehik@92.40.202.127.threembb.co.uk) (Ping timeout: 264 seconds)
2022-11-25 17:59:00 +0100eggplantade(~Eggplanta@104-55-37-220.lightspeed.sntcca.sbcglobal.net) (Ping timeout: 268 seconds)
2022-11-25 17:59:51 +0100raehik(~raehik@92.40.202.121.threembb.co.uk)
2022-11-25 18:00:36 +0100 <[exa]> LemanR: ah no worries it was a random idea :]
2022-11-25 18:01:51 +0100AlexNoo_AlexNoo
2022-11-25 18:02:25 +0100sawilagar(~sawilagar@user/sawilagar)
2022-11-25 18:07:52 +0100[itchyjunk](~itchyjunk@user/itchyjunk/x-7353470)
2022-11-25 18:11:35 +0100raehik(~raehik@92.40.202.121.threembb.co.uk) (Ping timeout: 264 seconds)
2022-11-25 18:13:29 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 18:13:52 +0100Tuplanolla(~Tuplanoll@91-159-68-152.elisa-laajakaista.fi)
2022-11-25 18:14:04 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-25 18:14:35 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2022-11-25 18:19:09 +0100LemanR(~LemanR@pool-74-109-28-147.phlapa.fios.verizon.net) (Quit: Client closed)
2022-11-25 18:19:39 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-25 18:21:40 +0100acidjnk(~acidjnk@p200300d6e7137a87d85cd0c34b3d9cfa.dip0.t-ipconnect.de)
2022-11-25 18:22:08 +0100kuribas(~user@ptr-17d51emqj0opa703e0o.18120a2.ip6.access.telenet.be) (Quit: ERC (IRC client for Emacs 27.1))
2022-11-25 18:22:15 +0100VOID418(~user@89.151.44.90) (Remote host closed the connection)
2022-11-25 18:23:57 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 18:24:47 +0100justsomeguy(~justsomeg@user/justsomeguy) (Ping timeout: 264 seconds)
2022-11-25 18:24:59 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 18:25:59 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de) (Ping timeout: 264 seconds)
2022-11-25 18:30:42 +0100ub(~Thunderbi@77.119.195.101.wireless.dyn.drei.com)
2022-11-25 18:31:39 +0100money_(~Gambino@user/polo)
2022-11-25 18:32:00 +0100akegalj(~akegalj@93-139-151-182.adsl.net.t-com.hr) (Quit: leaving)
2022-11-25 18:32:20 +0100ubert(~Thunderbi@77.119.213.106.wireless.dyn.drei.com) (Ping timeout: 265 seconds)
2022-11-25 18:32:20 +0100ububert
2022-11-25 18:35:21 +0100heisenberg2(~heisenber@2a09:bac1:3f60::16:19a) (Remote host closed the connection)
2022-11-25 18:35:53 +0100sawilagar(~sawilagar@user/sawilagar) (Read error: Connection reset by peer)
2022-11-25 18:36:28 +0100heisenberg2(~heisenber@2a09:bac1:3f60::16:19a)
2022-11-25 18:36:57 +0100heisenberg2(~heisenber@2a09:bac1:3f60::16:19a) (Remote host closed the connection)
2022-11-25 18:37:49 +0100money_polo
2022-11-25 18:38:02 +0100polomoney_
2022-11-25 18:38:14 +0100money_polo
2022-11-25 18:38:22 +0100waleee(~waleee@2001:9b0:213:7200:cc36:a556:b1e8:b340)
2022-11-25 18:38:38 +0100polomoney_
2022-11-25 18:39:12 +0100money_polo
2022-11-25 18:39:30 +0100 <[exa]> Is there a name for a monoid like [Maybe a] where a single Nothing in the list turns everything into Nothing? i.e., if mconcat==sequence, what would be mappend?
2022-11-25 18:39:32 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 18:39:48 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 18:41:33 +0100 <[exa]> (actually a semigroup would be sufficient)
2022-11-25 18:46:44 +0100 <[exa]> ah nice it's actually `Ap Maybe [a]`
2022-11-25 18:48:12 +0100notzmv(~zmv@user/notzmv) (Ping timeout: 256 seconds)
2022-11-25 18:50:01 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 18:50:02 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 18:52:27 +0100polo(~Gambino@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-11-25 18:55:03 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 18:56:17 +0100money_(~Gambino@user/polo)
2022-11-25 18:57:20 +0100azimut(~azimut@gateway/tor-sasl/azimut) (Ping timeout: 255 seconds)
2022-11-25 18:58:17 +0100azimut(~azimut@gateway/tor-sasl/azimut)
2022-11-25 18:58:31 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-25 18:59:13 +0100 <bjourne> [exa]: short-circuiting
2022-11-25 19:02:58 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd)
2022-11-25 19:05:10 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 19:16:45 +0100mei(~mei@user/mei)
2022-11-25 19:17:13 +0100gurkenglas(~gurkengla@p548ac72e.dip0.t-ipconnect.de)
2022-11-25 19:18:05 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 19:18:26 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 19:21:38 +0100beteigeuze(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Quit: beteigeuze)
2022-11-25 19:21:47 +0100beteigeuze1(~Thunderbi@a79-169-109-107.cpe.netcabo.pt)
2022-11-25 19:24:20 +0100tzh(~tzh@c-24-21-73-154.hsd1.wa.comcast.net)
2022-11-25 19:26:19 +0100zebrag(~chris@user/zebrag)
2022-11-25 19:26:35 +0100beteigeuze1(~Thunderbi@a79-169-109-107.cpe.netcabo.pt) (Ping timeout: 264 seconds)
2022-11-25 19:29:28 +0100chexum(~quassel@gateway/tor-sasl/chexum) (Remote host closed the connection)
2022-11-25 19:29:50 +0100chexum(~quassel@gateway/tor-sasl/chexum)
2022-11-25 19:30:06 +0100 <dminuoso> bjourne: not sure what kind of generalization you expect.
2022-11-25 19:30:23 +0100 <dminuoso> bjourne: A different approoach would be to wrap more in IO and use IO exceptions.
2022-11-25 19:30:31 +0100 <dminuoso> That's way less general, but potentially more ergonomic.
2022-11-25 19:30:34 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 19:32:08 +0100k`(~user@2605:a601:a60d:5400:4e:d060:14f9:8a36)
2022-11-25 19:32:43 +0100 <k`> Is it possible to force GHC to resolve duplicate overlappable instances by choosing one arbitrarily?
2022-11-25 19:33:52 +0100 <geekosaur> I think the implementation forbids that situation (the instances would resolve to the same symbol at link time)
2022-11-25 19:33:54 +0100 <dminuoso> Yes, its called IncoherentInstances
2022-11-25 19:34:20 +0100 <geekosaur> oh, really? I thought exact duplicates were pretty much impossible even with Incoherent
2022-11-25 19:34:46 +0100 <dminuoso> Mmm, maybe I misinterpreted their use of the word "duplicate"
2022-11-25 19:34:52 +0100 <geekosaur> since instances are global they map to global symbols and you can't have more than one
2022-11-25 19:35:13 +0100 <dminuoso> Interestingly IncoherentInstances is deprecated anyway
2022-11-25 19:35:24 +0100 <dminuoso> Ah beacuse you can mark INCOHERENT per instance as wel
2022-11-25 19:35:40 +0100 <dminuoso> Okay did not know that, but then again I have not yet properly understood why INCOHERENT would be useful at all
2022-11-25 19:36:42 +0100 <geekosaur> I guess we need to know more, but the short version is that if INCOHERENT doesn't allow it then you would need two distinct global symbols with the same name for it to work
2022-11-25 19:37:24 +0100 <k`> If they map to global symbols and you can't have more than one, what happens when an instances in one dependency of a package explicitly overlaps an instance in another dependency?
2022-11-25 19:39:37 +0100 <geekosaur> the instances are exposed in the package .hi files, so the compiler will know and report an error
2022-11-25 19:40:04 +0100 <geekosaur> if it's an exact overlap
2022-11-25 19:40:45 +0100 <geekosaur> most overlaps are like one is for Foo a and the other is for Foo Char or something like that. if you have two instances for Foo a, there's no way to do it
2022-11-25 19:41:06 +0100zmt00(~zmt00@user/zmt00) (Quit: Leaving)
2022-11-25 19:41:39 +0100 <k`> Like if I had an instance `Show a => Show (Foo a)` in package foo, and then an OVERLAPPING instance `Show (Foo Text)` in another package, compilation would fail?
2022-11-25 19:42:12 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 19:42:12 +0100 <geekosaur> that's not exact
2022-11-25 19:42:23 +0100 <geekosaur> Foo a is not Foo Text
2022-11-25 19:43:37 +0100 <k`> So if I had an OVERLAPPABLE instance `Applicative m => Functor m` in one package and an OVERLAPPABLE instance `Traversable m => Functor m` in another, I'd be screwed?
2022-11-25 19:43:58 +0100 <geekosaur> both would map to Functor m, yes
2022-11-25 19:44:21 +0100 <k`> OK, that makes sense. Thanks!
2022-11-25 19:44:34 +0100 <geekosaur> the constraint can only be discharged when the use site is compiled, not the instance declaration, so it is ignored until the use site
2022-11-25 19:45:49 +0100 <k`> Seems like if it were possible it could easily be leveraged to get automatic superclass instances, but since the context isn't part of the instance it's not possible.
2022-11-25 19:46:56 +0100zmt00(~zmt00@user/zmt00)
2022-11-25 19:48:03 +0100emmanuelux(~emmanuelu@user/emmanuelux)
2022-11-25 19:49:40 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 19:49:56 +0100nate4(~nate@98.45.169.16)
2022-11-25 19:51:42 +0100turlando(~turlando@user/turlando)
2022-11-25 19:54:59 +0100nate4(~nate@98.45.169.16) (Ping timeout: 265 seconds)
2022-11-25 19:59:28 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 20:02:24 +0100jonathanx(~jonathan@h-98-128-168-222.NA.cust.bahnhof.se) (Remote host closed the connection)
2022-11-25 20:03:52 +0100jakalx(~jakalx@base.jakalx.net) (Error from remote client)
2022-11-25 20:04:25 +0100money_(~Gambino@user/polo) (Quit: My MacBook has gone to sleep. ZZZzzz…)
2022-11-25 20:07:02 +0100jakalx(~jakalx@base.jakalx.net)
2022-11-25 20:19:23 +0100manwithluck(~manwithlu@194.177.28.176) (Read error: Connection reset by peer)
2022-11-25 20:20:14 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 20:21:57 +0100chele(~chele@user/chele) (Remote host closed the connection)
2022-11-25 20:22:23 +0100zeenk(~zeenk@2a02:2f04:a208:3600::7fe) (Quit: Konversation terminated!)
2022-11-25 20:22:51 +0100manwithluck(~manwithlu@194.177.28.176)
2022-11-25 20:28:23 +0100k`(~user@2605:a601:a60d:5400:4e:d060:14f9:8a36) (Ping timeout: 260 seconds)
2022-11-25 20:30:11 +0100jonathanx(~jonathan@h-178-174-176-109.A357.priv.bahnhof.se)
2022-11-25 20:30:11 +0100opticblast(~Thunderbi@172.58.87.196) (Ping timeout: 264 seconds)
2022-11-25 20:30:42 +0100oblivious(~oblivious@150.187.35.37.dynamic.jazztel.es)
2022-11-25 20:31:29 +0100oblivious(~oblivious@150.187.35.37.dynamic.jazztel.es) (Client Quit)
2022-11-25 20:33:40 +0100Lycurgus(~juan@user/Lycurgus)
2022-11-25 20:36:06 +0100acidjnk_new(~acidjnk@p200300d6e7137a87dd877e6fe5567bfb.dip0.t-ipconnect.de)
2022-11-25 20:36:16 +0100Lycurgus(~juan@user/Lycurgus) (Client Quit)
2022-11-25 20:37:02 +0100Major_Biscuit(~MajorBisc@86-88-79-148.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 20:37:43 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 260 seconds)
2022-11-25 20:39:50 +0100acidjnk(~acidjnk@p200300d6e7137a87d85cd0c34b3d9cfa.dip0.t-ipconnect.de) (Ping timeout: 256 seconds)
2022-11-25 20:40:31 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 20:40:54 +0100earthy(~arthurvl@2a02-a469-f5e2-1-ba27-ebff-fea0-40b0.fixed6.kpn.net)
2022-11-25 20:41:32 +0100chromoblob(~user@37.113.164.122) (Read error: Connection reset by peer)
2022-11-25 20:42:52 +0100srz(~srz@devil.dm.uba.ar)
2022-11-25 20:46:16 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 20:47:11 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 20:47:46 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com)
2022-11-25 20:47:46 +0100wroathe(~wroathe@207-153-38-140.fttp.usinternet.com) (Changing host)
2022-11-25 20:47:46 +0100wroathe(~wroathe@user/wroathe)
2022-11-25 20:56:18 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-25 20:57:05 +0100notzmv(~zmv@user/notzmv)
2022-11-25 21:01:33 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10) (Quit: No Ping reply in 180 seconds.)
2022-11-25 21:02:40 +0100sammelweis_(~quassel@2601:401:8200:2d4c:bd9:d04c:7f69:eb10)
2022-11-25 21:04:53 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 21:09:46 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:16ed:9a5e:a354:e244)
2022-11-25 21:09:54 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl)
2022-11-25 21:18:48 +0100k`(~user@2605:a601:a60d:5400:4e:d060:14f9:8a36)
2022-11-25 21:19:01 +0100k``(~user@136.56.140.2)
2022-11-25 21:21:11 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 21:21:44 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:1933:e30c:90a:59fd) (Remote host closed the connection)
2022-11-25 21:22:41 +0100eggplantade(~Eggplanta@2600:1700:38c5:d800:926:4196:430e:b1cd)
2022-11-25 21:23:13 +0100k`(~user@2605:a601:a60d:5400:4e:d060:14f9:8a36) (Ping timeout: 260 seconds)
2022-11-25 21:27:27 +0100gmg(~user@user/gehmehgeh)
2022-11-25 21:31:02 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 21:31:25 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz)
2022-11-25 21:45:28 +0100jinsun(~jinsun@user/jinsun) (Read error: Connection reset by peer)
2022-11-25 21:52:48 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-25 21:53:31 +0100caryhartline(~caryhartl@2600:1700:2d0:8d30:3991:2946:3701:6725)
2022-11-25 21:55:52 +0100libertyprime(~libertypr@118-92-78-165.dsl.dyn.ihug.co.nz) (Quit: leaving)
2022-11-25 21:56:31 +0100pavonia(~user@user/siracusa)
2022-11-25 21:57:08 +0100ruschlem(~Android@p200300ee372ac1477c4161fffecd866b.dip0.t-ipconnect.de)
2022-11-25 21:57:43 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 22:00:46 +0100Sgeo(~Sgeo@user/sgeo)
2022-11-25 22:02:35 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 265 seconds)
2022-11-25 22:05:20 +0100mei(~mei@user/mei) (Ping timeout: 260 seconds)
2022-11-25 22:05:51 +0100ruschlem(~Android@p200300ee372ac1477c4161fffecd866b.dip0.t-ipconnect.de) ()
2022-11-25 22:09:36 +0100lortabac(~lortabac@2a01:e0a:541:b8f0:16ed:9a5e:a354:e244) (Quit: WeeChat 2.8)
2022-11-25 22:11:05 +0100santiagopim(~user@90.167.66.131) (Remote host closed the connection)
2022-11-25 22:21:54 +0100L29Ah(~L29Ah@wikipedia/L29Ah) ()
2022-11-25 22:22:11 +0100L29Ah(~L29Ah@wikipedia/L29Ah)
2022-11-25 22:25:28 +0100Guest33(~Guest33@5.151.185.123)
2022-11-25 22:26:16 +0100Guest33Lvk22
2022-11-25 22:30:15 +0100Lvk22(~Guest33@5.151.185.123) (Client Quit)
2022-11-25 22:43:14 +0100gmg(~user@user/gehmehgeh) (Ping timeout: 255 seconds)
2022-11-25 22:45:55 +0100gmg(~user@user/gehmehgeh)
2022-11-25 22:45:58 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 22:47:56 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba)
2022-11-25 23:01:08 +0100sagax(~sagax_nb@user/sagax)
2022-11-25 23:04:27 +0100wroathe(~wroathe@user/wroathe) (Ping timeout: 265 seconds)
2022-11-25 23:18:00 +0100jmdaemon(~jmdaemon@user/jmdaemon)
2022-11-25 23:18:47 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 23:26:01 +0100srz(~srz@devil.dm.uba.ar) (Remote host closed the connection)
2022-11-25 23:26:36 +0100Erutuon(~Erutuon@user/erutuon)
2022-11-25 23:37:49 +0100zant(~zant@62.214.20.26)
2022-11-25 23:39:48 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net)
2022-11-25 23:41:55 +0100takuan(~takuan@178-116-218-225.access.telenet.be) (Remote host closed the connection)
2022-11-25 23:43:46 +0100beteigeuze(~Thunderbi@bl14-81-220.dsl.telepac.pt)
2022-11-25 23:45:11 +0100merijn(~merijn@86-86-29-250.fixed.kpn.net) (Ping timeout: 264 seconds)
2022-11-25 23:45:30 +0100tromp(~textual@92-110-219-57.cable.dynamic.v4.ziggo.nl) (Quit: My iMac has gone to sleep. ZZZzzz…)
2022-11-25 23:46:42 +0100coot(~coot@2a02:a310:e241:1b00:ec1a:e9df:79ac:66ba) (Quit: coot)
2022-11-25 23:51:32 +0100nate4(~nate@98.45.169.16)
2022-11-25 23:56:35 +0100nate4(~nate@98.45.169.16) (Ping timeout: 264 seconds)
2022-11-25 23:57:19 +0100TonyStone(~TonyStone@cpe-74-76-57-186.nycap.res.rr.com) (Remote host closed the connection)
2022-11-25 23:58:13 +0100troydm(~troydm@host-176-37-124-197.b025.la.net.ua)
2022-11-25 23:59:12 +0100TonyStone(~TonyStone@cpe-74-76-57-186.nycap.res.rr.com)