{-# LANGUAGE FlexibleInstances, OverlappingInstances #-} class IsFunction a where isFunction :: a -> Bool instance IsFunction (a -> b) where isFunction _ = True instance IsFunction a where isFunction _ = False main = print (isFunction (+)) >> print (isFunction "0")