{-# LANGUAGE EmptyCase #-} {-# LANGUAGE GADTs #-} -- {-# OPTIONS_GHC -Wall #-} module Main where import Unsafe.Coerce data D a where J :: Integer -> D Int instance Eq (D a) where J i == J j = i == j instance Num a => Num (D a) where fromInteger = unsafeCoerce . J . fromInteger {-# NOINLINE fromInteger #-} -- >>> m -- Just 5 m :: Maybe Integer m = case (5 :: D Int) of J j -> Just j -- >>> n -- Nothing n :: Maybe Integer n = case 5 of 5 -> Just 42 J{} -> Just 3 main = do print m print n