----------------------------------------------------------------------------- -- | -- Copyright : (C) 2015 Edward Kmett -- License : BSD-style (see the file LICENSE) -- Maintainer : Edward Kmett <ekmett@gmail.com> -- Stability : experimental -- Portability : non-portable -- ----------------------------------------------------------------------------- module Data.Struct.LinkCut ( LinkCut , new , link , cut , root , cost , parent , connected ) where import Control.Monad.Primitive import Data.Struct.Internal.LinkCut hiding (parent) -- | O(log n). Find the parent of a node. -- -- This will return 'Nil' if the parent does not exist. -- -- Repeated calls on the same value without intermediate accesses are O(1). parent :: (PrimMonad m, Monoid a) => LinkCut a (PrimState m) -> m (LinkCut a (PrimState m)) parent = up