{-# LANGUAGE OverloadedLists, TypeFamilies #-} import qualified Data.Set as S import GHC.Exts main = do putStrLn (f []) putStrLn (f [1,2]) putStrLn (f [2,0]) putStrLn (f [3,2]) putStrLn (f [2,7]) putStrLn (f [2,2]) putStrLn (f [1..7]) f :: S.Set Int -> String f [] = "empty" f [_] = "one element" f [2,_] = "two elements, the smaller one is 2" f [_,2] = "two elements, the bigger one is 2" f _ = "else"