No, it is impossible to establish what values the user passes to the constructor.
. , Data.Map, Data.Ratio . , , , , :
module UInt
( UInt
, uint
) where
data UInt = UInt Int
uint :: Int -> Maybe UInt
uint x | x >= 0 = Just (UInt x)
| otherwise = Nothing