use std::io::Error as IOError; use dhall_syntax::{BinOp, Import, Label, ParseError, V}; use crate::core::context::TypecheckContext; use crate::phase::resolve::ImportStack; use crate::phase::{Normalized, Type, Typed}; pub type Result = std::result::Result; #[derive(Debug)] #[non_exhaustive] pub enum Error { IO(IOError), Parse(ParseError), Decode(DecodeError), Encode(EncodeError), Resolve(ImportError), Typecheck(TypeError), Deserialize(String), } #[derive(Debug)] pub enum ImportError { Recursive(Import, Box), UnexpectedImport(Import), ImportCycle(ImportStack, Import), } #[derive(Debug)] pub enum DecodeError { CBORError(serde_cbor::error::Error), WrongFormatError(String), } #[derive(Debug)] pub enum EncodeError { CBORError(serde_cbor::error::Error), } /// A structured type error that includes context #[derive(Debug)] pub struct TypeError { type_message: TypeMessage, context: TypecheckContext, } /// The specific type error #[derive(Debug)] pub(crate) enum TypeMessage { UnboundVariable(V