
  -- disallow circular references
  checkCyclic waif value

  let var    = waifData waif  :: PVar PropertyMap
      vspace = pvar_space var :: VSpace

  liftVTx $ modifyPVar var $
    VHashMap . HM.insert name (vref vspace value) . unVHashMap

  return value

checkCyclic :: WAIF -> Value -> MOO ()
checkCyclic waif = checkCyclic'