Here, I use a listofitems package \readlist* to read the argument as a 1-item list, with leading/trailing spaces stripped. Then I can do an \if (expanded) comparison on whether the list item is a + or -.
\documentclass{article}
\usepackage{listofitems}
\def\posa(#1){%
\readlist*\myarg{#1}
\if+\myarg[1]Plus\else \if-\myarg[1]Minus\else Retry \fi\fi
}
\begin{document}
\posa(+)
\posa( -)
\posa(?)
\posa( + )
\end{document}

If one needs the test to be done with the non-expanded argument of \posa, then this would suffice, since \myarg[1], when twice expanded, yields the token(s) of the argument (leading/trailing spaces removed).
\documentclass{article}
\usepackage{listofitems}
\def\posa(#1){%
\readlist*\myarg{#1}
\expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\tmp%
\expandafter\expandafter\expandafter{\myarg[1]}%
\expandafter\ifx\expandafter+\tmp Plus\else%
\expandafter\ifx\expandafter-\tmp Minus\else Retry \fi\fi%
}
\begin{document}
\posa(+)
\posa( -)
\posa(?)
\posa( + )
\end{document}
In plain TeX, use \input{listofitems} instead of \usepackage{listofitems}.