{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE OverlappingInstances #-} class IsList a where isList :: a -> Bool instance IsList a where isList x = False instance IsList [a] where isList x = True isList2 :: (IsList a) => a -> Bool isList2 = isList main = do print (isList (42 :: Int)) print (isList [42 :: Int]) print (isList2 (42 :: Int)) print (isList2 [42 :: Int])