From 06b1638d4a1fd1a9ca3889247f32a90724bc0bec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= <mordae@anilinux.org>
Date: Wed, 22 Jan 2020 09:33:18 +0100
Subject: [PATCH] Make Form exports more ergonomic
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Jan Hamal Dvořák <mordae@anilinux.org>
---
 lib/Hikaru/Form.hs | 37 ++++++++++++++++++++++---------------
 1 file changed, 22 insertions(+), 15 deletions(-)

diff --git a/lib/Hikaru/Form.hs b/lib/Hikaru/Form.hs
index 4ace1e3..5f2b497 100644
--- a/lib/Hikaru/Form.hs
+++ b/lib/Hikaru/Form.hs
@@ -31,10 +31,11 @@ module Hikaru.Form
   , multiSelectField'
   , opt
   , req
+  , whenChecking
+  , fieldShouldCheck
+  , fieldValue
   , addNote
   , addAttribute
-  , fieldCheck
-  , fieldValue
   , hasErrors
   )
 where
@@ -433,17 +434,11 @@ where
   --
   req :: (Monad m) => l -> FieldT l a m ()
   req label = do
-    shouldCheck <- fieldCheck
-
-    if shouldCheck
-       then do
-         value <- fieldValue
-         case value of
-           Nothing -> addNote $ NoteError label
-           Just _v -> return ()
-
-        else do
-          return ()
+    whenChecking do
+      value <- fieldValue
+      case value of
+        Nothing -> addNote $ NoteError label
+        Just _v -> return ()
 
 
   -- |
@@ -466,8 +461,20 @@ where
   -- |
   -- TODO
   --
-  fieldCheck :: (Monad m) => FieldT l a m Bool
-  fieldCheck = FieldT (fst <$> ask)
+  whenChecking :: (Monad m) => FieldT l a m b -> FieldT l a m ()
+  whenChecking checkField = do
+    check <- fieldShouldCheck
+
+    if check
+       then checkField >> return ()
+       else return ()
+
+
+  -- |
+  -- TODO
+  --
+  fieldShouldCheck :: (Monad m) => FieldT l a m Bool
+  fieldShouldCheck = FieldT (fst <$> ask)
 
 
   -- |
-- 
GitLab