module Util.Validation ( nelError , toMaybe , maybeError , fireValidation ) where import Control.Monad (join) import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as NEL import Data.Text (Text) import Data.Validation (Validation (Failure, Success)) import qualified Data.Validation as Validation import Reflex.Dom (Dynamic, Event, Reflex) import qualified Reflex.Dom as R nelError :: Validation a b -> Validation (NonEmpty a) b nelError = Validation.validation (Failure . NEL.fromList . (:[])) Success toMaybe :: Validation a b -> Maybe b toMaybe (Success s) = Just s toMaybe (Failure _) = Nothing maybeError :: Validation a b -> Maybe a maybeError (Success _) = Nothing maybeError (Failure e) = Just e fireValidation :: forall t a b c. Reflex t => Dynamic t (Validation a b) -> Event t c -> Event t b fireValidation value validate = R.fmapMaybe (Validation.validation (const Nothing) Just) (R.tag (R.current value) validate)