
type GenIdentPartEnabled p =
    (GenIdentPartPrefix p ~ A Ident, GenIdentPartNum p ~ P Natural)

data EGenIdentPart p m a where
    GetGenIdentPart :: GenIdentPartEnabled p => EGenIdentPart p m (Ident p)

makeSem ''EGenIdentPart

genIdentPart :: (GenIdentPartEnabled p, Member (EGenIdentPart p) r)
    => Sem r (Ident p)
genIdentPart = getGenIdentPart
