The problem
Say you must implement a web form to signup for an account. The form contains two field: username and password and the follo...
For further actions, you may consider blocking this person and/or reporting abuse
Hi Giulio, thanks for the great library and the great documentation. I'm following along, and I'd like to know how would you implement a function that takes a list of
Validators
and applies them to a single input, something along these lines:Notice that for simplicity I'm making the
Validation
type take aNonEmptyArray
of errors, since I'm mainly interested on how to combine the validations from a dynamically constructed array.Finally, if the list of validations is empty, we can assume the input is valid.
Thanks!
This signature is weird
If you already know that the input has type
A
, why are you validating in the first place?Check this out: Parse, don't validate
Ah, yes. That's a very good observation thanks. Most likely the
Validator
would be producing some "valid" version ofA
. Point taken.Now, if we come back to the original email address validation example, how would you combine a dynamically built list of email validation functions? Suppose we load the validations to the client from a service, that gives us the business rules we want to validate?
The current example takes a
NonEmptyArray
as imput, and I have not been able to find a way to combine validations from anArray
.Again, many thanks, and thanks for your suggestion.
Hi Leon, I'm a little late to the party, but here's a gist of an implementation that I think does what you want. For this example, we assume our application requires a string of type Name that satisfies 2 business rules: to be considered a valid Name, a candidate string must be at least 5 characters long, and it must contain the letter 't'. The types could be improved, and the function should pry be generalized, but... you get the idea at least.
Edit: For whatever reason I can't seem to embed a gist right now, so let's try a CodeSandbox.
Thanks Ross, this seems to be just what I was trying to achieve. Much appreciated.
Thank you so much for those articles, Fp-ts has done a lot to increase my speed everyday at work!
I'm struggling to figure what this would look like without the
sequenceT
helper. Would you have time to provide a snippet ?(I tried going through the sequenceT source but I can't quite figure out what's going on yet)
This is what
sequenceT
is doing under the hood (when specialized togetValidation(getSemigroup<string>())
+ three validations)Ohhhh, okay, the tuple of results is what you apply to. Thank you so much for your answer!
(And yes, going back to the applicative article right now 😉)
How would this look in 2.0.0-rc.7?
For starters
getArraySemigroup
andgetApplicative
seems to be missing :)With
fp-ts@2
will be something likeI've been following your blog series, and am keen to better understand how this applicative validation works so I pasted your sample above into my code. Unfortunately I get "Argument of type 'Either, [string, string, string]>' is not assignable to parameter of type 'unknown[]'." error on the sequenceT(getValidation...line above. Using fp-ts @ 2.2.0 and Typescript @ 3.7.3. What would be expecting a parameter of type unknown[]?
Sorry, I can't repro, the sample above looks fine
how to extract the left validation messages or right person object from the
validatePerson
methodYou can fold the result
Thats gr8 !
function lift(check: (a: A) => Either): (a: A) => Either, A> {