Pre-Proposal: Add Validation somewhere easily accessible

Henning Thielemann lemming at henning-thielemann.de
Sun Sep 21 17:14:44 UTC 2014


On Sun, 21 Sep 2014, Joseph Abrahamson wrote:

> The “purely applicative Either” is Either with a new Applicative interface which can no longer take a
> corresponding Monad interface. I have personally reinvented it over and over although it is perhaps commonly
> known as Validation:
> 
>     data Validation e a = Invalid e | Valid a deriving ( Show, Functor, … )
> 
>     instance Monoid e => Applicative (Validation e) where
>       pure = Valid
>       Invalid e1 <*> Invalid e2 = Invalid (e1 <> e2)
>       Invalid e1 <*> _          = Invalid e1
>                  <*> Invalid e2 = Invalid e2
>       Valid   f  <*> Valid   a  = Valid (f a)
> 
>     -- No corresponding Monad
> 
> It could be perhaps better implemented as a newtype wrapper over Either to facilitate rapid conversion to the
> more common type.

I would define it as you did above. Left and Right constructors of Either 
are not very descriptive.


> I would like to build a proposal to include Validation in some form in a common package. Despite the
> misalignment with the name, `transformers` seems like a plausible target, though I fear changes to that
> package are rarely worth the pain. Suggestions on implementation and target package are welcome. Pending
> informative feedback, I will try to write a true proposal within 2 weeks.

My first choice would be 'transformers' because I already import this 
extensively. Second choice would be any other package that is plain 
Haskell 98 for portability reasons.


More information about the Libraries mailing list