浏览代码

More monad trans

jherve 1 年之前
父节点
当前提交
ce3946bdea
共有 1 个文件被更改,包括 20 次插入6 次删除
  1. 20 6
      src/LinkedIn/Output.purs

+ 20 - 6
src/LinkedIn/Output.purs

@@ -2,7 +2,7 @@ module LinkedIn.Output (run, runToDetached, toOutput) where
 
 import Prelude
 
-import Control.Monad.Except (except, lift, runExceptT)
+import Control.Monad.Except (ExceptT, except, lift, runExceptT)
 import Data.Either (Either(..), either)
 import Data.Traversable (class Traversable, traverse)
 import Effect (Effect)
@@ -37,17 +37,31 @@ runToDetached :: forall t.
   => Proxy t
   -> Document
   -> Effect (Either QueryError (t DetachedNode))
-runToDetached _ dom = do
-  qRes <- doQuery LE.query dom
-  detach qRes
+runToDetached proxy dom = runExceptT $ runToDetached'' proxy dom
+
+runToDetached'' :: forall t.
+  Traversable t
+  => Extractible t
+  => Proxy t
+  -> Document
+  -> ExceptT QueryError Effect (t DetachedNode)
+runToDetached'' _ dom = do
+  qRes <- LE.query @t dom
+  detach'' qRes
 
 doQuery ∷ ∀ b. QueryRunner' Document b → Document → Effect (Either QueryError b)
 doQuery query dom = runQuery $ query dom
 
 detach ∷ ∀ a t. Traversable t ⇒ Either a (t Node) → Effect (Either a (t DetachedNode))
-detach n = runExceptT $ do
+detach n = runExceptT $ detach' n
+
+detach' ∷ ∀ a t. Traversable t ⇒ Either a (t Node) → ExceptT a Effect (t DetachedNode)
+detach' n = do
   n' <- except n
-  lift $ traverse toDetached n'
+  detach'' n'
+
+detach'' ∷ ∀ a t. Traversable t ⇒ (t Node) → ExceptT a Effect (t DetachedNode)
+detach'' n = lift $ traverse toDetached n
 
 toUI ∷ ∀ a t. Traversable t ⇒ Either a (t DetachedNode) → Either String (t UIElement)
 toUI = either (const $ Left "could not convert to UI") fromDetachedToUI