Why does only tr2 work, although the only difference between tr1 and tr2 is the order of arguments?

import Data.Tree (Tree(..))

data Type a where Tree    :: Type a -> Type (Tree a)
 Int     :: Type Int
 String  :: Type String

type Traversal1 = forall a.a -> Type a -> a

type Traversal2 = forall a.Type a -> a -> a

tr1 :: Traversal1
tr1 (Node _ (t:_)) (Tree Int) = Node 1 [t]
tr1 n Int                     = n+n
tr1 s String       = s++s

tr2 :: Traversal2
tr2 (Tree Int) (Node _ (t:_)) = Node 1 [t]
tr2 Int n                     = n+n
tr2 String s       = s++s

    Couldn't match expected type `a' against inferred type `Tree Int'
      `a' is a rigid type variable bound by
          the type signature for `tr1' at tratest.hs:9:25
    In the pattern: Node _ (t : _)
    In the definition of `tr1':
        tr1 (Node _ (t : _)) (Tree Int) = Node 1 [t]