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.