newPlace :: Monad m => PlaceType -> [value] -> MkPNMonad m value PlaceNo
    newPlace typ initValues = do
        label <- getLabel
        let op mkpn = (placeNo, mkpn')
              where
                placeNo = mkpnPlaceCount mkpn + 1
                mkpn' = mkpn { mkpnPlaceCount = placeNo,
                               mkpnPlaces = DM.insert placeNo (Place label typ) (mkpnPlaces mkpn),
                               mkpnMarking = DM.insert placeNo initValues (mkpnMarking mkpn)
                             }
        state op
newPlace :: Monad m => PlaceType -> [value] -> MkPNMonad m value PlaceNo
newPlace typ initValues = do
        label <- getLabel
        let op mkpn = (placeNo, mkpn')
              where
                placeNo = mkpnPlaceCount mkpn + 1
                mkpn' = mkpn { mkpnPlaceCount = placeNo,
                               mkpnPlaces = DM.insert placeNo (Place label typ) (mkpnPlaces mkpn),
                               mkpnMarking = DM.insert placeNo initValues (mkpnMarking mkpn)
                             }
        state op
newPlace typ initValues = do
        label <- getLabel
        let op mkpn = (placeNo, mkpn')
              where
                placeNo = mkpnPlaceCount mkpn + 1
                mkpn' = mkpn { mkpnPlaceCount = placeNo,
                               mkpnPlaces = DM.insert placeNo (Place label typ) (mkpnPlaces mkpn),
                               mkpnMarking = DM.insert placeNo initValues (mkpnMarking mkpn)
                             }
        state op