То же, что мы всегда используем для преобразования типов в значения: классы типов.
class MaybeNatVal (v :: Maybe Nat) where
maybeNatVal :: Proxy v -> Maybe Integer
instance MaybeNatVal Nothing where
maybeNatVal _ = Nothing
instance KnownNat n => MaybeNatVal (Just n) where
maybeNatVal x = Just $ natVal $ unJust x
where unJust :: Proxy (Just n) -> Proxy (n :: Nat)
unJust _ = Proxy
Библиотека, предложенная в другом ответе, делает то же самое, за исключением того, что классом типов является polymorphi c, а экземпляры - генерируется шаблоном Haskell.