eval env (List [Atom "if", pred, conseq, alt]) = do
  result <- eval env pred
  case result of
    Bool False -> eval env alt
    Bool True  -> eval env conseq
    otherwise  -> throwError $ TypeMismatch "bool" otherwise
    --otherwise  -> eval conseq
--eval env  (List ((Atom "cond") : expressions)) = cond expressions
eval env (List [Atom "if", pred, conseq, alt]) = do
  result <- eval env pred
  case result of
    Bool False -> eval env alt
    Bool True  -> eval env conseq
    otherwise  -> throwError $ TypeMismatch "bool" otherwise
    --otherwise  -> eval conseq
--eval env  (List ((Atom "cond") : expressions)) = cond expressions
eval env (List [Atom "if", pred, conseq, alt]) = do
  result <- eval env pred
  case result of
    Bool False -> eval env alt
    Bool True  -> eval env conseq
    otherwise  -> throwError $ TypeMismatch "bool" otherwise
    --otherwise  -> eval conseq
--eval env  (List ((Atom "cond") : expressions)) = cond expressions