formality_core/
language.rs1use crate::cast::UpcastFrom;
2use crate::term::CoreTerm;
3use crate::variable::{CoreBoundVar, CoreExistentialVar, CoreUniversalVar, CoreVariable};
4use std::fmt::Debug;
5use std::hash::Hash;
6
7pub trait Language: 'static + Copy + Ord + Hash + Debug + Default {
9 const NAME: &'static str;
11
12 type Kind: Copy + CoreTerm<Self>;
15
16 type Parameter: HasKind<Self>
19 + CoreTerm<Self>
20 + UpcastFrom<CoreVariable<Self>>
21 + UpcastFrom<CoreUniversalVar<Self>>
22 + UpcastFrom<CoreExistentialVar<Self>>
23 + UpcastFrom<CoreBoundVar<Self>>;
24
25 const BINDING_OPEN: char;
27
28 const BINDING_CLOSE: char;
30}
31
32pub type CoreKind<L: Language> = L::Kind;
34
35pub type CoreParameter<L: Language> = L::Parameter;
37
38pub trait HasKind<L: Language> {
39 fn kind(&self) -> CoreKind<L>;
40}