    {- |
    Definition of a datatype that reports on the success of a parser.
    -}
    module Sound.MIDI.Parser.Report where

    {- |
    This datatype is the result of a parser.
    First it stores a sequence of warnings.
    Warnings are for corruptions of the input which can be fixed.
    After encountering a series of warnings,
    there is finally an end,
    either a successful one, with the result as @(Right result)@
    or an eventual non-fixable problem indicated by @(Left errorMessage)@.
    -}
    data T a =
       Cons {
          warnings :: [UserMessage],
          result   :: Either UserMessage a
       }
       deriving (Show, Eq)

    type UserMessage = String