This is not the issue with this specific example, but since this is the first result on Google for "multiple definitions Haskell", I figured I should contribute what the problem was for me:
If you are defining the function multiple times using pattern-matching with some of the arguments, all of the definitions must be consecutive. If there is other code in between them, they are considered separate definitions.
Example: the following is invalid because the definition of b divides the definitions of a:
frobnicate :: Bool -> String
frobnicate True = "foo"
b = "bar"
frobnicate False = b