module Text.Formlets.FormResult ( toE, fromE, FormResult (..)) where
import Control.Applicative
import qualified Control.Applicative.Error as E
toE :: FormResult a -> E.Failing a
toE (Success a) = E.Success a
toE (Failure f) = E.Failure f
toE (NotAvailable e) = E.Failure [e]
fromE :: E.Failing a -> FormResult a
fromE (E.Success a) = Success a
fromE (E.Failure f) = Failure f
data FormResult a
= Success a
| Failure [String]
| NotAvailable String
deriving (Show)
instance Applicative FormResult where
pure = Success
Failure msgs <*> Failure msgs' = Failure (msgs ++ msgs')
Success _ <*> Failure msgs' = Failure msgs'
Failure msgs' <*> Success _ = Failure msgs'
Success f <*> Success x = Success (f x)
NotAvailable x <*> _ = NotAvailable x
_ <*> NotAvailable x = NotAvailable x
instance Functor FormResult where
fmap f (Success a) = Success (f a)
fmap f (Failure msgs) = Failure msgs
fmap f (NotAvailable x) = NotAvailable x