Jointed functor compositions in Я

If you start feeling the taste of monad transformers then you can be sure that you already understand everything! I intentionally avoid using words like “effects”, “handlers”, “lifting”, etc. Everything is a functor and natural transformation - keeping it easy.

https://muratkasimov.art/Ya/Articles/Jointed-functor-compositions/

3 Likes

Some feedback: I’m interested in reading about your ideas, but I find these articles hard to get into. It would be helpful to me if they started with an introduction containing motivation and context.

When opening an article, my first question is “is this topic interesting to me?”. If I don’t know what the topic is, even after reading multiple paragraphs, then it’s hard for me to justify spending more time reading.

3 Likes

I’m rejecting this feedback due to lack of specifics.

1 Like

I think your feedback is spot on. I stopped following along with the articles and the progress of the language a long time ago. The content is so decontexualized that, even though I enjoy learning new things, I can’t find a place for the discussed concepts to live in my mental model because honestly idk what mental model the post relies on! I don’t recognize many of the symbols used, so I can’t tell if I’m reading something using popular mathematical notation, or haskell notation, or something else altogether. Or maybe the post is introducing the new syntax. IDK! This is why papers have an abstract at the beginning. Maybe the reader is expected to have read all of the previous posts? Or just some in particular which aren’t mentioned? But what would a reader gain from figuring all that out? No clue! You have to figure out how to read the article and then actually get through it, and then, I guess you might be able to tell if there was any interesting content inside. Why read an article with a high cost of accessibility and a low chance of learning anything interesting? That’s why I don’t anymore.

5 Likes

Why are you author resisting? No one want to harm you.
Everyone tries to help you to make articles more undestentible for readers.
Your articles extremely hard to understand now, imho.
No examples, no explanations, no uses, no purposes - just abstract transformations.

2 Likes

I mean, there is nothing wrong per se about writing concise dense technical articles “how to build a chair out of sheet titanium”. An article is not obliged to explain the importance of building chairs or superior properties of titanium. Nevertheless, posting such an article on a furniture forum or on a forum of metalworkers begs an explanation why it is relevant to the audience.

I think this is what @iokasimov is missing. Nothing wrong with a blog post about jointed functor compositions in Ya. But posting it on a Haskell forum assumes that the material is of interest for the audience. Why would this audience care about jointed functor compositions? or about Ya? There are no answers to this either in the blog post (it does not even mention that Ya is a Haskell library) or in this thread.

1 Like

Haskell is a Ya library and the syntax is obviously legal Haskell. Clearly haskell discourse relevant.

Why mention it every time? Especially when it’s trivial to find out as a reader because you are already in a web browser using with a keyboard.

Also it’s one click away (" source code snippets" links to an .hs file)

Also, this is a .art domain. Take it for what that TLD says it is!

2 Likes

@iokasimov, things have moved on since your December 2024 video and its:

image

For example, is is now itself, and output has changed its type. What is the equivalent ‘Hello, world!’ example, given the ya and ya-* GitHub repositories as they are today?

1 Like

Short answer is to add one more label:

If you don’t mind I’d like to use this opportunity to provide a long one.

So, List is a famous covariant functor bundled with some natural transfromations you can think of as “swapping”: List (t o) -> t (List o) - here you may recognise traverse from base, but it’s not the same since contravariant functors also could be involved.

If you open a page with List primitive you’ll see several options, each one points to a bunch of natural transformations:

Here we need one with World (for now it’s just an alias to IO, but there are plans to enhance it).
How many natural transformation of such a kind do exist: List (World o) -> World (List o) ? As many as you can imagine, actually.

I think this is the most difficult part of using it - labels. Each label serves a purpose to tell the reader about behaviour and to guide the compiler which instance should have been chosen.

Because for List specifically, you can traverse it Forth and Aback. Await means that World behaviour is synhronous (here is a little more about Await/Async).

Therefore there are technically 4 combinations available:

Printing out single characters one by one is inefficient and asynchnonicity doesn’t make much sence since they are fast enough to be interleaved - I’m just showing the principle on this small example.

You’ll find the snippet with code above here.

1 Like