Re: parentheses, the ones around the lambda are just the same as in any ordinary expression, for example:

foo x y = x * (y+x)

About the language being able to deconstruct lists, that's because Haskell is designed to deconstruct
*any* algebraic data type (ADT).

-- ADT for a linked list: data List a -- [a] <--> List a = Cons a (List a) -- (:) <--> Cons | Nil -- [] <--> Nil -- ADT for a binary tree: data BTree a = Node (BTree a) (BTree a) | Empty

And yes, your drop2 function does exactly what you say it does, although you don't need the inner parentheses in the pattern.

About the minus business, yes, that's a syntax quirk.