
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
bs-validation
Advanced tools
A BuckleScript implementation of the Folktale validation applicative
NOTE: These are not bindings, this a ReasonML implementation of the
Validation applicative.
I wanted a way to do validations for my server side project.
Not all of the Folktale/Validation functions will be implemented. Here is a list of the currently implemented functions:
All implemented functions are found in src/Validation.re, They are all
documented with their Folktale style doc strings.
yarn add bs-validation
bs-validation to your bsconfig.json{
"dependencies": [ "bs-validation" ]
}
The library is exposed as a functor which accepts modules that implement the following type interface:
module type Foldable = {
type t('a);
let concat: (t('a), t('a)) => t('a);
};
All of the examples use an array based implementation of the Foldable type:
module FoldableArray = {
type t('a) = array('a);
let concat = (x, y) => Belt_Array.concat(x, y);
};
You import the module into your project by calling the Validation functor
with your version of the Foldable type.
module V = Validation.Make_validation(FoldableArray);
Then you can use it to validate all of your things!
let lengthError = "Password must have more than 6 characters.";
let strengthError = "Password must contain a special character.";
let isPasswordLongEnough = (password) =>
String.length(password) > 6
? V.Success(password)
: V.Failure([|lengthError|]);
let isPasswordStrongEnough = (password) => {
let regex = [%bs.re "/[\\W]/"];
Js.Re.test(password, regex)
? V.Success(password)
: V.Failure([|strengthError|])
};
let isPasswordValid = (password) => {
V.Success()
|> V.concat(isPasswordLongEnough(password))
|> V.concat(isPasswordStrongEnough(password))
|> V.map((_) =>password)
};
describe("Folketale password validation example", () => {
test("should return the password", () => {
let password = "rosesarered$andstuff";
switch (isPasswordValid(password)) {
| Failure(f) => { Js.log(f); fail("unexpected_failure") }
| Success(p) => Expect.expect(p) |> Expect.toBe(password)
}
});
test("should return a single item failure", () => {
let password = "rosesarered";
switch (isPasswordValid(password)) {
| Failure(f) => Expect.expect(f) |> Expect.toBeSupersetOf([|strengthError|])
| Success(_) => fail("unexpected_success")
}
});
test("should return 2 items in the failure list", () => {
let password = "foo";
switch (isPasswordValid(password)) {
| Failure(f) => {
Expect.expect(f)
|> Expect.toBeSupersetOf([|lengthError, strengthError|])
}
| Success(_) => fail("unexpected_success")
}
});
});
FAQs
BucklesScript bindings to the validationjs library
We found that bs-validation demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.