@@ -148,7 +148,7 @@ parseTypeClassDeclaration = do
148148 idents <- P.many (indented *> identifier)
149149 members <- P.option [] . P.try $ do
150150 indented *> reserved "where"
151− mark (P.many (same *> parseTypeDeclaration))
151+ mark (P.many (same *> positioned parseTypeDeclaration))
152152 return $ TypeClassDeclaration className idents members
153153
154154parseTypeInstanceDeclaration :: P.Parsec String ParseState Declaration
@@ -164,14 +164,17 @@ parseTypeInstanceDeclaration = do
164164 ty <- P.many (indented *> parseTypeAtom)
165165 members <- P.option [] . P.try $ do
166166 indented *> reserved "where"
167− mark (P.many (same *> parseValueDeclaration))
167+ mark (P.many (same *> positioned parseValueDeclaration))
168168 return $ TypeInstanceDeclaration name (fromMaybe [] deps) className ty members
169169
170+positioned :: P.Parsec String ParseState Declaration -> P.Parsec String ParseState Declaration
171+positioned d = PositionedDeclaration <$> sourcePos <*> d
172+
170173-- |
171174-- Parse a single declaration
172175--
173176parseDeclaration :: P.Parsec String ParseState Declaration
174−parseDeclaration = PositionedDeclaration <$> sourcePos <*> P.choice
177+parseDeclaration = positioned (P.choice
175178 [ parseDataDeclaration
176179 , parseTypeDeclaration
177180 , parseTypeSynonymDeclaration
@@ -181,7 +184,7 @@ parseDeclaration = PositionedDeclaration <$> sourcePos <*> P.choice
181184 , parseImportDeclaration
182185 , parseTypeClassDeclaration
183186 , parseTypeInstanceDeclaration
184− ] P.<?> "declaration"
187+ ]) P.<?> "declaration"
185188
186189parseLocalDeclaration :: P.Parsec String ParseState Declaration
187190parseLocalDeclaration = PositionedDeclaration <$> sourcePos <*> P.choice