data Foo = Foo class ToMaybeFoo a where toMaybeFoo :: a -> Maybe Foo instance ToMaybeFoo Foo where toMaybeFoo a = Just a instance ToMaybeFoo (Maybe Foo) where toMaybeFoo a = a myModifiedFn :: ToMaybeFoo a => a -> () myModifiedFn a = case toMaybeFoo a of Just a -> () Nothing -> () main :: IO () main = pure $ myModifiedFn Foo main' :: IO () main' = pure $ myModifiedFn (Just Foo)