Why does Haskell's "flip id" has this type?

The id function has this type:

id :: a -> a

You get an instance of this type, when you replace a by a -> b:

id :: (a -> b) -> (a -> b)

which, because of currying, is the same as:

id :: (a -> b) -> a -> b

Now apply flip to this and you get:

flip id :: a -> (a -> b) -> b

In the case of id (+) the instance is:

id :: (Num a) => (a -> a) -> (a -> a)

Now flip id gives you:

flip id :: (Num a) => a -> (a -> a) -> a

Side note: This also shows you how ($) is the same as id, just with a more restricted type:

($) :: (a -> b) -> a -> b
($) f x = f x
-- unpoint:
($) f   = f
-- hence:
($)     = id