[Haskell-cafe] Lift data from IO to Validation

Alexis King lexi.lambda at gmail.com
Sat Jan 4 19:30:45 UTC 2020


You might want to check out https://hackage.haskell.org/package/monad-validate <https://hackage.haskell.org/package/monad-validate>, which provides a monad transformer version of a Validation-like type. You can stack it on top of IO and do whatever you want there. Errors are collected from multiple branches as long as you use applicative operations where possible, so you probably want to use ApplicativeDo. The monad laws are satisfied via a relaxed notion of equality; see the documentation for more info.

Disclaimer: I am the author of monad-validate.

Alexis

> On Jan 4, 2020, at 08:58, Debasish Ghosh <ghosh.debasish at gmail.com> wrote:
> 
> Hi -
> 
> I am not an experienced Haskell programmer and would like to have some help with the following problem ..
> 
> I am trying to validate a bunch of inputs and found the package Data.Validation. I am also using Data.Time for date and time. I have a function like this ..
> 
> validateOpenDate :: ZonedTime -> Validation [String] ZonedTime
> 
> It's supposed to validate a date for which I need to fetch the current date and time. I can do that with getZonedTime :: IO ZonedTime. I want to check if the current time is less than the date time I pass to the function and return an appropriate Validation.
> 
> The question is how do I lift the result from IO into the Validation ? Or is there any alternative strategy that I should consider for this validation ? I have a number of other validations which follow the same strategy but don't have the IO. My final goal is to be able to compose all these validations applicatively to prepare a final ADT in a smart constructor.
> 
> Any help will be appreciated ..
> 
> regards.
> 
> -- 
> Debasish Ghosh

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20200104/91362495/attachment.html>


More information about the Haskell-Cafe mailing list