import StdEnv
import Data.Either
import Data.Func
+import Data.Functor
+import Data.Functor.Identity
from Data.Map import :: Map(..)
import qualified Data.Map
import Control.Monad
import Control.Monad.State
import Control.Monad.Fail
import Control.Monad.Trans
+import System.IO
import ASDS
import ASDS.Source
equal :: a (PViewT m a) -> PViewT m () | MonadFail m & == a
equal expected mon = mon >>= \v->if (v == expected) (pure ()) (fail "Not equal")
+//Start :: Either String (((), [NRequest Identity)]), Map String Dynamic)
+Start w = /*eval*/execIO (runStateT (observe intsource () "int" (putStrLn "blurp" >>| pure ()) >>| setShare 42 intsource) []) w
+
+import Debug.Trace
+
+intsource :: Source m () Int Int | pure m
+intsource = source "int" (\_->pure 42) (\_ _->pure (\_->True))
+
+/*
//Start :: Either String ((), Map String Dynamic)
Start = runStateT (runStateT (sequence_ $ map test tests) []) 'Data.Map'.newMap
where
sh :: Lens (Lens (Lens (Lens (RWPair ReadSource WriteSource)))) (StateT (Map String Dynamic) m) () a a | MonadFail m & TC a
sh = focus "foo" astore
+*/
testpar :: (A.a: sds1 m () a a | TC, == a) (A.a: sds2 m () a a | TC, == a) -> PViewT m () | MonadFail m & read, write sds1 & read, write sds2
testpar l r =
dstore = translate (\i->((), i)) $ keyedStore store
store :: Source (StateT (Map String Dynamic) m) () (Map String Dynamic) (Map String Dynamic) | Monad m
-store = source (\_->getState) \_->put
+store = source "store" (\p->getState) \p w->(\p->True) <$ put w