formality_core/
term.rs

1use std::{fmt::Debug, hash::Hash, sync::Arc};
2
3use crate::{
4    binder::CoreBinder,
5    cast::{DowncastFrom, Upcast},
6    collections::Set,
7    fold::CoreFold,
8    language::Language,
9    parse::CoreParse,
10};
11
12pub trait CoreTerm<L: Language>:
13    Clone
14    + CoreFold<L>
15    + CoreParse<L>
16    + Ord
17    + Eq
18    + Hash
19    + Debug
20    + Upcast<Self>
21    + DowncastFrom<Self>
22    + 'static
23    + Sized
24{
25}
26
27impl<L: Language, T: CoreTerm<L>> CoreTerm<L> for Vec<T> {}
28
29impl<L: Language, T: CoreTerm<L>> CoreTerm<L> for Set<T> {}
30
31impl<L: Language, T: CoreTerm<L>> CoreTerm<L> for Option<T> {}
32
33impl<L: Language, T: CoreTerm<L>> CoreTerm<L> for Arc<T> {}
34
35impl<L: Language> CoreTerm<L> for usize {}
36
37impl<L: Language> CoreTerm<L> for u32 {}
38
39impl<L: Language, A: CoreTerm<L>, B: CoreTerm<L>> CoreTerm<L> for (A, B) {}
40
41impl<L: Language, T: CoreTerm<L>> CoreTerm<L> for CoreBinder<L, T> {}
42
43impl<L: Language> CoreTerm<L> for () {}