1use std::fmt::Debug;
2use std::fmt::Display;
3use std::hash::Hash;
4
5#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub enum Token<Term, NonTerm> {
8 Term(Term),
9 NonTerm(NonTerm),
10}
11impl<Term: Display, NonTerm: Display> Display for Token<Term, NonTerm> {
12 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13 match self {
14 Token::Term(term) => write!(f, "{}", term),
15 Token::NonTerm(nonterm) => write!(f, "{}", nonterm),
16 }
17 }
18}
19impl<Term: Debug, NonTerm: Debug> Debug for Token<Term, NonTerm> {
20 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21 match self {
22 Token::Term(term) => write!(f, "{:?}", term),
23 Token::NonTerm(nonterm) => write!(f, "{:?}", nonterm),
24 }
25 }
26}