I\'m new to Haskell and would like to know whether it\'s possible to define a function that is only defined on a subset of an already existing type, without actually having
Wrap the subset in a newtype
newtype EvenInteger = EvenInteger { unEvenInteger :: Integer } deriving (Show, Eq, Ord, Num) mkEvenInteger :: Integer -> Maybe EvenInteger mkEvenInteger n = case n % 2 of 0 -> Just $ EvenInteger n _ -> Nothing squared :: EvenInteger -> EvenInteger squared n = n * n