I'm finding it really hard to grok what this is even supposed to do but you have:
eval1(If t1 t2 t3) = case (If t1 t2 t3) of
eval1(If t1 t2 t3) -> Just t1
Case doesn't work that way. It would be something like:
eval1 (If t1 t2 t3) = case (some expression) of
pattern1 -> somevalue
pattern2 -> anothervalue
I don't see the intent of pattern matching the exact argument to eval1.
What is the type of eval1?
Also, your filename is homework2.hs. Please read this page on the Haskell wiki:
That's not to say you shouldn't ask these questions here but note that most of us will not do your homework for you. We will provide hints, but you should be doing your due diligence to try to understand what your code is doing and possible reasons why it isn't working.
--
Michael Xavier
http://www.michaelxavier.net