Crazazy [hey hi! :D]

  • 2 Posts
  • 15 Comments
Joined 1 year ago
cake
Cake day: June 19th, 2023

help-circle


  • What are you on about? The open letter was specifically advocating against sponsorships and advertisements of the Military Industrial Complex. I.E. private companies who specifically try to turn a profit from countries going to war. Companies that literally earn money over people’s dead bodies. I think the people that wrote the open letter were very aware that being sponsored by the military was something that is hard to avoid. However there is a clear difference between being sponsored by a military and being sponsored by, like, literal death merchants






  • ah I think that’s where I’m at odds with a lot of lemmy NixOS users then 😅, since I am and have always been pretty hesitant to recommend NixOS to anyone in particular. I find the upfront costs of NixOS too big for me to recommend the OS to anyone who wasn’t already looking into it and knows its downsides and upsides.

    I do agree however on the fact that using nix is purely beneficial. It doesn’t hurt if you just add a .nix file to your project, since it doesn’t do any harm to an already existing project. It can just install your build tools and then consider itself done, and if you don’t happen to like nix after all, the new installer makes uninstalling easier than ever. There is pretty much no downside to downloading the package manager, something I can’t say about the OS.

    Having said that, I don’t think nix should be the end-all be-all standard in package management. I’m sure there will be other package managers that will be better than “nix but with yaml sprinkled in”, and are capable of improving the state of the art. At least, that’s something I hope to happen. For example, I have reservations about using a full-blown programming language for doing my project configuration (see people’s problems with Gradle for why you might not want that). I think a maven-style approach (where you’d have just limited config options, but can expand the package manager’s capabilities by telling it to install certain plugins (in the same config file!)), could be worth looking into, and I’d be lying if I said I wasn’t on the look out for a potential better nix alternative



  • Alright as someone who likes Haskell and has dabbled in unison before, I believe I can answer all these questions for you:

    • Why is helloWorld there twice?

    It is common in languages like haskell and ocaml to first mention the type of a function, so in this case:

    • the type of helloWorld is '{IO, Exception} (). That is it’s type signature (important for later)
    • the implementation of helloWorld is \_ -> println "Hello, World!"
    • What’s the ' for?
    • What are the () for?

    Here is where I have to get into the nitty gritty of how unison actually works. Unison has what programming language researchers call an effect system. The type signature of helloWorld indicates that it can perform the IO and Exception types of side effects, and these need to be handled. (in this case, they are handled by the compiler, but other types of side effects can be handled by the programmer themselves)
    However, for reasons Unison does not like dealing with eagerly evaluated non-function values with side effects. For this reason, there is '. Essentially, what it does is turn a value into a function that accepts () as it’s argument. We could therefore say that the type signature of helloWorld is also () -> {IO, Exception} (). The last () indicates that, next to it’s IO and Exception side effects, it also returns () as a value. This is because, in functional programming languages, all functions need to return values (or run infinitely, but that is for another topic)

    Now I’ve been used to functional programming for quite a while now, so things that seem natural to me can be absolutely woozy for anyone not used to this paradigm. So if anything still feels vague to you feel free to comment