a new approach for creating a conditional function in pointfree fashion

Can someone help me convert this code into a pointfree style?

To provide context: The function receives an Array of Either types and returns a Task type. If any of the Either types have the left set, the Task type is rejected with that value. If none of the Either types have the left set, the Task type is resolved. This function is used in the following way:

    Async.parallel(xs).             
        map(eachToEither).          
        chain(rejectAnyLefts).      
        fork(error, success)

In practice, I would like to add another operation just before the `fork` to persist data. However, before doing so, I want to ensure that my code is as idiomatic as possible. The specific function in question here is `rejectAnyLefts`, which I am trying to write in a pointfree style but facing some challenges.

  1. The 'if' statement
  2. The requirement to store the leftObjs value for use in the 'if' condition and potentially the return value
const rejectAnyLefts = eitherArray => {
    const leftObjs = r.filter(r.propEq("isLeft", true), eitherArray)

    const isEmpty = r.propEq('length', 0)
    return (isEmpty(leftObjs)) ?
        Task.rejected(leftObjs) :
        Task.of(eitherArray)
}

Answer №1

If you are solely interested in capturing the initial Left value, you can achieve this by using R.sequence. This function converts a [Either a b] into an Either a [b].

R.pipe(R.sequence(Either.of), R.invoker(2, 'fold', Task.rejected, Task.of));

Instead of using Either, you could utilize a Validation type which combines all Failure values. However, this approach requires that your Failure types implement Semigroup for combining them.

To capture and reject all instances of Left, you can represent your existing implementation in a point-free format like this:

R.pipe(R.partition(R.prop('isLeft')),
       R.ifElse(R.pipe(R.head, R.isEmpty),
                R.pipe(R.last, Task.of),
                R.pipe(R.head, Task.rejected)));

Whether this method is more or less readable than your current implementation is mostly subjective.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

What sets apart optionalDependencies from peerDependencies in the Meta optional?

Why are both marking dependency as optional and what is the specific use-case of each? Is peerDependenciesMeta intended for npm packages while optionalDependencies is meant for projects? For example, in my npm package, certain modules require dependency ...

Breaking down a URL based on one of two distinct components

Currently, I have a piece of code that splits the URL and removes everything after &7. Is there a way to modify it so that it also checks for |relevance simultaneously and splits based on whichever one is found? $(document).ready(($) => { const pa ...

The HTTP.GET method seems to be malfunctioning

I'm having some trouble loading an image from a HTTP.GET request into my application. The picture just won't seem to display correctly. Any suggestions on what might be causing this issue? Below is the code I am using: HTML: <ion-view view- ...

In Cypress, I am trying to specifically choose only numerical values from a dropdown menu. However, the list contains a mix of alphanumeric and numeric values

Looking to streamline: This is my code: cy.get('[role=presentation]') cy.get('[role=row]').find('td') .get('[role=gridcell]').eq(9).click().wait(2000) cy.get('[role=listbox]').get('[role=option]& ...

Storing HTML elements in a database using jQuery's html() method

I have encountered a dilemma that has left me stumped after extensive online research. I have a dynamically generated webpage and need to save the entire appended body of the page to a database using PHP and MySQL. My current approach involves using the fo ...

Incorporating a swisstopo map from an external source into an Angular

I am looking to integrate a swisstopo map into my angular 8 app. As I am new to angular, I am unsure how to include this example in my component: I have tried adding the script link to my index.html file and it loads successfully. However, I am confused a ...

VueJS / v-html is displaying a blank page (Bokeh-html)

Especially as a newcomer to VueJS, I am currently in the process of trying to showcase a local HTML file within the Vue Application. The method I'm using to fetch the HTML file involves Axios, here's how it goes: <template> <div> ...

Article: Offering CoffeeScript and JavaScript Assets Simultaneously

Currently, my web app is up and running using Node and Express. I initially developed it in JavaScript but now want to transition over to CoffeeScript. My goal is to have both file1.js and file2.coffee coexisting in the application (with both being served ...

Issues arise when trying to manage HTML received as a response from a server in plain text

I have a scenario where I am dynamically generating an HTML table on the server side using Java and then sending it to the client as JSON data. The response looks something like this: <table class="table"></table><thead class="thead-dark"&g ...

Execute JavaScript function only if it is the final invocation

I'm currently experiencing an issue with a Javascript function that updates a bootstrap spinner. The function works well in general, but the problem arises when I click multiple times. I utilize ajax to update the quantity of selected products in the ...

Modifying child text in React when hovering over a button

How can I update the text of a child function component when hovering over a button in the parent class component? I am struggling to access the prop in the child component and keep getting null. Any assistance would be greatly appreciated. Parent Compone ...

Troubles with AJAX comment system validation issues

Having created a webpage that displays articles with a textarea under each article for user comments, I implemented AJAX successfully. The validation also works fine - if the textarea is empty, it will display an error and not submit the comment. However, ...

Checking to see if there are a minimum of two checkboxes selected before inputting the data into the database

I am currently using a combination of HTML, PHP, JavaScript, MySQL, and Wampserver. In my project, I have implemented 3 checkboxes where the user can choose a maximum of two options. Once selected, these choices are then inserted into the database. Initi ...

The deletion of property '1' from the [object Array] is not possible

How to Retrieve a List in My Components Using Input : @Input() usersInput: Section[]; export interface Section { displayName: string; userId: number; title: number; } Here is the Value List : 0: displayName: "بدون نام" ...

How to Resubmit a Form Using Ajax?

My form utilizes ajax to call the server for user authentication. However, I've encountered an issue where if a user enters the wrong password and then tries to correct it, any subsequent calls do not trigger the on('submit') function, leavi ...

Tips for updating the value of a key in a JavaScript object when the TextField tag's value changes

Here is the schema I am using for my model: const workoutSchema = mongoose.Schema({ workouts: [ { workoutName: String, sets: Number, reps: Number, weight: Number, }, ], }); Below is the postData referenced in the text f ...

Identifying rectangular shapes in an image and overlaying a div on top using Jquery

I am currently exploring the possibility of achieving the following: Imagine having an image within a div (serving as the background image). This image resembles an Excel sheet. My goal is to generate an input tag or contenteditable div when a user clicks ...

Using jQuery to retrieve information and calculate total sum

I am currently attempting to calculate the total sum of checked input prices. Here is the code I am using: function totalSum(e) { e.preventDefault(); var unit = $("input:checked").parent("dt").siblings("dd").find("span"); total = 0; $ ...

Searching for data within an array of objects that contain multiple key-value pairs in the form of arrays: A step-by-step guide

For instance const information = [ { companies: [ {name: 'Yuri'}, {name: 'Boeing'}, {name: 'Laser'}, ], sectors: [ {name: 'Logistic'}, {name: 'Aviati ...

Creating a variable in the outer scope from within a function

I am currently implementing validation for a form field on the server side using ExpressJS. Here are the steps I am taking: Reading data from a JSON file Extracting an array property from the data Verifying if this array contains every element of a ...