It depends on why you want all these constants, of course. Personally I would be inclined to give explicit type signatures, yes. If you have a lot of these to declare, I would probably go for
foo = 1234 :: Int
bar = 5678 :: Int
baz = 1337 :: Int
GHC may warn about missing top-level type declarations, but the above bindings are perfectly monomorphic, so you're paying no run-time polymorphism penalty, and the code is clearly readable. (And you can easily add more entries later.)
I might inquire as to why you need to define so many integer constants, and humbly suggest that there may be some more idiomatic way to achieve what you're trying to do - but that would be the subject of another question. For the matter in hand, basically any of the options you've suggested is "fine", but my own personal preference (and that is all it is) would be for the example above.