showRule :: Token a => Rule a -> String
showRule ru = case ru of
  Initial     -> "Initial"
  Argument    -> "Argument"
  Application -> "Application"
  StackApp    -> "StackApp"
  ApplyOp     -> "ApplyOp"
  StackL      -> "StackL"
  StackOp     -> "StackOp"
  ContinueOp  -> "ContinueOp"
  MatchedR    -> "MatchedR"
  SExpr       -> "SExpr"
  Done result -> case result of
    Success   -> "Success"
    Failure f -> "Failure:\n" ++ showFailure f
showRule :: Token a => Rule a -> String
showRule ru = case ru of
  Initial     -> "Initial"
  Argument    -> "Argument"
  Application -> "Application"
  StackApp    -> "StackApp"
  ApplyOp     -> "ApplyOp"
  StackL      -> "StackL"
  StackOp     -> "StackOp"
  ContinueOp  -> "ContinueOp"
  MatchedR    -> "MatchedR"
  SExpr       -> "SExpr"
  Done result -> case result of
    Success   -> "Success"
    Failure f -> "Failure:\n" ++ showFailure f
showRule ru = case ru of
  Initial     -> "Initial"
  Argument    -> "Argument"
  Application -> "Application"
  StackApp    -> "StackApp"
  ApplyOp     -> "ApplyOp"
  StackL      -> "StackL"
  StackOp     -> "StackOp"
  ContinueOp  -> "ContinueOp"
  MatchedR    -> "MatchedR"
  SExpr       -> "SExpr"
  Done result -> case result of
    Success   -> "Success"
    Failure f -> "Failure:\n" ++ showFailure f