|
|
@@ -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
|