module GraphRewriting.Layout.Gravitation where import Data.View import Data.Vector import Control.Monad import GraphRewriting.Graph.Types import GraphRewriting.Graph.Read import GraphRewriting.Layout.Position import GraphRewriting.Layout.Force centralGravitation ∷ View Position n ⇒ Node → WithGraph n Force centralGravitation = liftM (attraction $ fromScalar 0) . examineNode position gravitation ∷ View Position n ⇒ Node -> Rewrite n Force gravitation node = do n ← examineNode position node ns ← mapM (examineNode position) =<< readNodeList return $ fsum [attraction n' n | n' ← ns]