rule1 :: Parser [Match Char]
rule1 = try position <|> do
                            ids <- fmap Match <$> identifier rulesDef
                            whiteSpace transformDef
                            rest <- option [] (reservedOp rulesDef "<>" *> position)
                            return (ids <> rest)
rule1 :: Parser [Match Char]
rule1 = try position <|> do
                            ids <- fmap Match <$> identifier rulesDef
                            whiteSpace transformDef
                            rest <- option [] (reservedOp rulesDef "<>" *> position)
                            return (ids <> rest)
rule1 = try position <|> do
                            ids <- fmap Match <$> identifier rulesDef
                            whiteSpace transformDef
                            rest <- option [] (reservedOp rulesDef "<>" *> position)
                            return (ids <> rest)