diff --git a/byg/src/ComputationM.hs b/byg/src/ComputationM.hs index b566a8b..401fa9a 100644 --- a/byg/src/ComputationM.hs +++ b/byg/src/ComputationM.hs @@ -44,6 +44,9 @@ evalComputationM' top m = runState (execWriterT (unComputationM m)) top evalComputationM :: ComputationM () -> [DependencyUntyped] evalComputationM m = fst (evalComputationM' 0 m) +tellDep :: (Show a, Show b) => Dependency a b -> ComputationM' () +tellDep dep = tell [DependencyUntyped dep (show dep)] -- Call show for later debugging purposes + genDependency' :: (Show u, Show a) => (Token a -> ComputationM' (Dependency u a)) -> ComputationM a genDependency' f = do top <- get @@ -51,11 +54,11 @@ genDependency' f = do target = Token top' put top' result <- f target - tell [DependencyUntyped result (show result)] + tellDep result pure target genDependency :: (Show u, Show a) => (Token a -> Dependency u a) -> ComputationM a -genDependency g = genDependency' (\t -> pure $ g t) +genDependency f = genDependency' (pure . f) inject :: Show a => a -> ComputationM a inject x = genDependency (Dependency NoToken (Inject x)) @@ -65,9 +68,8 @@ getListElem outer = genDependency (Dependency outer GetListElem) setListElem :: Show a => Token a -> Token [a] -> ComputationM () setListElem a outer = do - tell [DependencyUntyped d (show d)] + tellDep (Dependency a SetListElem outer) pure NoToken - where d = Dependency a SetListElem outer run :: (Show a, Show b, IsFunction f a b) => f -> Token a -> ComputationM b run f input = genDependency (Dependency input (Function f))