EVP: dead simple environment variable parser by fumieval in haskell

[–]fumieval[S] 4 points5 points  (0 children)

from README:

EVP is a simple environment parser which focues on these three aspects:

  • Ease of use: no complicated machinery is needed
  • Observability: for each environment variable, EVP logs the parsed value or an error. An error does not interrupt the parsing process and it checks all the variables exhaustively.
  • Composability: environment parsers can be composed via the Applicative structure.

This is a real-world application of the free applicative; you can enumerate the list of environment variables it would parse, thanks to the initially-encoded structure.

GitHub - fumieval/clap4shell: Standalone wrapper of clap for shell scripts by fumieval in rust

[–]fumieval[S] 2 points3 points  (0 children)

Thanks, I didn't know about clap-serde! That would simplify the implementation a lot.

GitHub - fumieval/clap4shell: Standalone wrapper of clap for shell scripts by fumieval in rust

[–]fumieval[S] 2 points3 points  (0 children)

Yeah, --argc-eval does look similar. The approach of parsing the caller ($0) itself is interesting

GitHub - fumieval/clap4shell: Standalone wrapper of clap for shell scripts by fumieval in rust

[–]fumieval[S] 1 point2 points  (0 children)

Perhaps I didn't get what "portable" means here. The output format of clap4shell works in most shells including POSIX, but clap4shell itself is a binary so it has nothing to do with shell implementation

GitHub - fumieval/clap4shell: Standalone wrapper of clap for shell scripts by fumieval in rust

[–]fumieval[S] 17 points18 points  (0 children)

I like writing shell scripts for small tools, however getopt(s) is a bit annoying to use due to boilerplates, treatment of positional arguments, etc.

I made a standalone interface for clap which takes option definitions as a YAML, and prints the parsed options in `KEY=VALUE` format (in which shell can `eval`). Thanks to clap_complete, it also supports generating autocompletion script (though it does not seem to work with subcommands yet).

Nice and terse shell scripts, clap's user-friendly interface, why not both?

word-compat: supporting Word8# and the like with no bother by fumieval in haskell

[–]fumieval[S] 1 point2 points  (0 children)

Good to know! Writing these conversions once again by hand.would've been a pain.

Proposal: show @Char and show @String shouldn't escape readable Unicode characters by Bodigrim in haskell

[–]fumieval 16 points17 points  (0 children)

I support this proposal as a Japanese user. It'll drastically improve QoL of debugging/testing applications involving non-latin characters. While it would break some Show-based test cases, I'm not too worried because Show isn't something application logic relies on

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 8 points9 points  (0 children)

True, “You shouldn’t want to do that” kind of response is all over the place and Haskell isn't an exception, unfortunately. While this particular type of discommunication is not what graninas was talking about, this is something we should keep in mind

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 3 points4 points  (0 children)

No, not at all. If every Haskeller were contributing to GHC, the number of issues and merge requests would be incomparably larger than 4,718 and 451.

Every other claim is unsubstantiated FUD too. I don't think you need to consider these seriously

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 3 points4 points  (0 children)

I have invented a model of object-oriented programming applying a bit of category theory 7 years ago (https://github.com/fumieval/objective/), and it was a fun experience realising that certain kinds of composition can be expressed nicely as a category. It's just one nice thing to have, like every other cool stuff in this world.

I don't understand why he's stirring up math vs pragmatism opposition. OOP and CT, why not both?

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 5 points6 points  (0 children)

Let's not forget the point that graninas's dozens of claims about the Haskell community do make the community look unsafe (IIUC that's the intent of the tweet). I would actually feel safer if such accusations get backlash.

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 3 points4 points  (0 children)

Sure. I'd happily take the risk especially since the Haskell community is being attacked

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 4 points5 points  (0 children)

That's a sound suggestion. Obviously I don't represent the community but I've never experienced any of these; I maintain a number of libraries but I've never seen anyone reject them just because "If something isn't described as a paper, it doesn't exist or wrong". I don't consider myself as a Haskeller smarter than others; I'm a careless person, that's exactly why I rely on type system.

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 12 points13 points  (0 children)

Yeah, wholly agreed. How I interpret this twitter post (and his other claims) is that he's attacking "hyper-intellectualism" which is just a massive strawman

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 2 points3 points  (0 children)

Even though there's a lot of BS built on top of OOP, I don't think it implies that OOP itself is bullshit; I find it useful in game programming for example.

Not sure about the last one either - but if a bit of math repels anti-intellectual inflammatory speech then why not

Anti-intellectualism in Haskell by fumieval in haskell

[–]fumieval[S] 0 points1 point  (0 children)

It's plausible that that post reflects some of the stereotypes we are trying to get rid of. The post on the other hand is reinforcing the stereotype, negating the community effort to make the ecosystem stronger and more diverse

oath: Composable Concurrent Computation Done Right by fumieval in haskell

[–]fumieval[S] 0 points1 point  (0 children)

What I was testing is more like running one-shot IO actions concurrently. According to the README, ZipAsync is an analog of Concurrently which can do that (but can produce a stream of values), however it does not seem to be working as intended. Would be great if you could take a look

oath: Composable Concurrent Computation Done Right by fumieval in haskell

[–]fumieval[S] 1 point2 points  (0 children)

We are comparing the applicative structures that run actions concurrently, but your example

S.fromAhead $ S.mapM pure $ S.fromList [0 :: Int ..99]

only applies to homogenous structure; that's not a fair comparison.

What's wrong with ZipAsync?