Basic number property checker
Integer not Double

Double is not a reasonable type because checking if a number is big does not work with Doubles, you should use Integer

First class functions

Using a list is not a clean procedure, it does not work for very big numbers and it is slow for big numbers.

It is better to pass in a validation function:

numberCheck :: (Integer -&gt; Bool) -&gt; String -&gt; IO ()
numberCheck predicate text = do
  num &lt;- askUser ("Is it " ++ text ++ "? ")

  if predicate num
    then putStrLn "Yes"
    else putStrLn "No"


Usage is:

main = do
  hSetBuffering stdout NoBuffering
  putStrLn "Welcome to Numbers!"

  numberCheck odd "odd"
  numberCheck (\x -&gt; x `mod` 18 == 0) "multiple of 18"
  numberCheck (&gt; 100) "big (bigger than 100)"