aboutsummaryrefslogtreecommitdiff
path: root/src/type/mod.rs
blob: 623edc90f23fcb0a657c4f8d4bc835b784e24285 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

use crate::sexp::{SExp, SExp::*};

pub enum Type {
    Integer,
    Arrow(Box<Type>, Box<Type>),
}

pub enum TypeError {
    UndefinedVariable(String),
    InvalidOperator {
	operator: SExp,
	expected: Type,
	found:    Type,
    },
    InvalidArgList {
	arglist:  SExp,
	expected: Type,
	found:    Type,
    },
    OtherError
}

impl SExp {
    /// ```rust
    /// use melisp::{
    ///     r#type::{*, Type::*, TypeError::*},
    ///     sexp::{SExp::*, SLeaf::*, util::*},
    /// };
    /// ```
    pub fn type_check(&self) -> Result<Type, TypeError> {
	todo!()
    }
}