use crate::expected::{Expected, PExpected}; use roc_collections::all::SendMap; use roc_module::symbol::Symbol; use roc_region::all::{Located, Region}; use roc_types::subs::Variable; use roc_types::types::{Category, PatternCategory, Type}; #[derive(Debug, Clone, PartialEq)] pub enum Constraint { Eq(Type, Expected, Category, Region), Store(Type, Variable, &'static str, u32), Lookup(Symbol, Expected, Region), Pattern(Region, PatternCategory, Type, PExpected), True, // Used for things that always unify, e.g. blanks and runtime errors SaveTheEnvironment, Let(Box), And(Vec), } #[derive(Debug, Clone, PartialEq)] pub struct LetConstraint { pub rigid_vars: Vec, pub flex_vars: Vec, pub def_types: SendMap>, pub defs_constraint: Constraint, pub ret_constraint: Constraint, }