unison-parser-typechecker-0.0.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Unison.Typechecker.Context

Synopsis

Documentation

synthesizeClosed :: (BuiltinAnnotation loc, Var v, Ord loc, Show loc, Semigroup loc) => PrettyPrintEnv -> PatternMatchCoverageCheckAndKindInferenceSwitch -> Map Reference [Variance] -> [Type v loc] -> TypeLookup v loc -> Term v loc -> Result v loc (Type v loc) Source #

public interface to the typechecker

data ErrorNote v loc Source #

Constructors

ErrorNote 

Fields

Instances

Instances details
(Var v, Show loc, Ord loc) => Show (ErrorNote v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

showsPrec :: Int -> ErrorNote v loc -> ShowS #

show :: ErrorNote v loc -> String #

showList :: [ErrorNote v loc] -> ShowS #

data InfoNote v loc Source #

Constructors

SolvedBlank (Recorded loc) v (Type v loc) 
Decision v loc (Term v loc) 
TopLevelComponent [(v, Type v loc, RedundantTypeAnnotation)] 
Warning (Warn v loc) 
VarBinding v loc (Type v loc) 
VarMention v loc

The usage of a particular variable. We report the variable and its location so we can match a given source location with a specific symbol later in the LSP.

Instances

Instances details
(Var v, Show loc, Ord loc) => Show (InfoNote v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

showsPrec :: Int -> InfoNote v loc -> ShowS #

show :: InfoNote v loc -> String #

showList :: [InfoNote v loc] -> ShowS #

data Cause v loc Source #

Instances

Instances details
(Var v, Show loc, Ord loc) => Show (Cause v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

showsPrec :: Int -> Cause v loc -> ShowS #

show :: Cause v loc -> String #

showList :: [Cause v loc] -> ShowS #

newtype Context v loc Source #

Constructors

Context (CtxSegment v loc) 

Instances

Instances details
(Ord loc, Var v) => Show (Context v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context.Structure

Methods

showsPrec :: Int -> Context v loc -> ShowS #

show :: Context v loc -> String #

showList :: [Context v loc] -> ShowS #

Ord v => Measured (Info v loc) (Context v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context.Structure

Methods

measure :: Context v loc -> Info v loc #

data Warn v loc Source #

Constructors

AbilityConcreteSubset [Type v loc] [Type v loc] (Term v loc) (Context v loc) 

Instances

Instances details
(Var v, Ord loc) => Show (Warn v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

showsPrec :: Int -> Warn v loc -> ShowS #

show :: Warn v loc -> String #

showList :: [Warn v loc] -> ShowS #

data Element v loc Source #

Elements of an ordered algorithmic context. A context is a sequence of Elements (here represented as a finger tree), but not every sequence represents a valid context. A context is only valid if every type that occurs in the context is well scoped with regard to the previous variable bindings in the context.

We will refer to invalid trees as 'context segments' since they can be prefixed to become part of a valid context. Keeping track of the same context information for _every_ segment is important to avoiding some performance problems with a more naive implementation.

Constructors

Var (TypeVar v loc)

A variable declaration

Solved (Blank loc) v (Monotype v loc)

v is solved to some monotype

Ann v loc (Type v loc)

v has type a, maybe quantified loc contains the span of the name of the bound v

Marker v

used for scoping

Instances

Instances details
Var v => Show (Element v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context.Structure

Methods

showsPrec :: Int -> Element v loc -> ShowS #

show :: Element v loc -> String #

showList :: [Element v loc] -> ShowS #

Var v => Eq (Element v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context.Structure

Methods

(==) :: Element v loc -> Element v loc -> Bool #

(/=) :: Element v loc -> Element v loc -> Bool #

Ord v => Measured (Info v loc) (Element v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context.Structure

Methods

measure :: Element v loc -> Info v loc #

data PathElement v loc Source #

Constructors

InSynthesize (Term v loc) 
InSubtype (Type v loc) (Type v loc) 
InSubAbilities [Type v loc] [Type v loc] 
InEquate (Type v loc) (Type v loc) 
InCheck (Term v loc) (Type v loc) 
InInstantiateL v (Type v loc) 
InInstantiateR (Type v loc) v 
InSynthesizeApp (Type v loc) (Term v loc) Int 
InFunctionCall [v] (Term v loc) (Type v loc) [Term v loc] 
InAndApp 
InOrApp 
InIfCond 
InIfBody loc 
InVectorApp loc 
InMatch loc 
InMatchGuard 
InMatchBody 
InActionRestriction 

Instances

Instances details
(Show v, Show loc) => Show (PathElement v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

showsPrec :: Int -> PathElement v loc -> ShowS #

show :: PathElement v loc -> String #

showList :: [PathElement v loc] -> ShowS #

type Term v loc = Term' (TypeVar v loc) v loc Source #

type Type v loc = Type (TypeVar v loc) loc Source #

type TypeVar v loc = TypeVar (Blank loc) v Source #

data Result v loc a Source #

Constructors

Success !(Seq (InfoNote v loc)) !a 
TypeError !(NESeq (ErrorNote v loc)) !(Seq (InfoNote v loc)) 
CompilerBug !(CompilerBug v loc) !(Seq (ErrorNote v loc)) !(Seq (InfoNote v loc)) 

Instances

Instances details
MonadFix (Result v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

mfix :: (a -> Result v loc a) -> Result v loc a #

Applicative (Result v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

pure :: a -> Result v loc a #

(<*>) :: Result v loc (a -> b) -> Result v loc a -> Result v loc b #

liftA2 :: (a -> b -> c) -> Result v loc a -> Result v loc b -> Result v loc c #

(*>) :: Result v loc a -> Result v loc b -> Result v loc b #

(<*) :: Result v loc a -> Result v loc b -> Result v loc a #

Functor (Result v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

fmap :: (a -> b) -> Result v loc a -> Result v loc b #

(<$) :: a -> Result v loc b -> Result v loc a #

Monad (Result v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

(>>=) :: Result v loc a -> (a -> Result v loc b) -> Result v loc b #

(>>) :: Result v loc a -> Result v loc b -> Result v loc b #

return :: a -> Result v loc a #

errorTerms :: ErrorNote v loc -> [Term v loc] Source #

lookupAnn :: Ord v => Context v loc -> v -> Maybe (Type v loc) Source #

lookupSolved :: Ord v => Context v loc -> v -> Maybe (Monotype v loc) Source #

apply :: (Var v, Measured (Info v loc) c) => c -> Type v loc -> Type v loc Source #

Replace any existentials with their solution in the context

isEqual :: (Var v, Ord loc) => Type v loc -> Type v loc -> Either (CompilerBug v loc) Bool Source #

isSubtype :: (Var v, Ord loc) => Type v loc -> Type v loc -> Either (CompilerBug v loc) Bool Source #

fitsScheme :: (Var v, Ord loc) => Type v loc -> Type v loc -> Either (CompilerBug v loc) Bool Source #

isRedundant :: (Var v, Ord loc) => Type v loc -> Type v loc -> M v loc Bool Source #

data Suggestion v loc Source #

Instances

Instances details
Show v => Show (Suggestion v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

showsPrec :: Int -> Suggestion v loc -> ShowS #

show :: Suggestion v loc -> String #

showList :: [Suggestion v loc] -> ShowS #

Var v => Eq (Suggestion v loc) Source # 
Instance details

Defined in Unison.Typechecker.Context

Methods

(==) :: Suggestion v loc -> Suggestion v loc -> Bool #

(/=) :: Suggestion v loc -> Suggestion v loc -> Bool #

data Replacement v Source #

Instances

Instances details
Show v => Show (Replacement v) Source # 
Instance details

Defined in Unison.Typechecker.Context

Eq v => Eq (Replacement v) Source # 
Instance details

Defined in Unison.Typechecker.Context

Ord v => Ord (Replacement v) Source # 
Instance details

Defined in Unison.Typechecker.Context

typeErrors :: Result v loc a -> Seq (ErrorNote v loc) Source #

infoNotes :: Result v loc a -> Seq (InfoNote v loc) Source #

data Unknown Source #

Constructors

Data 
Effect 

Instances

Instances details
Show Unknown Source # 
Instance details

Defined in Unison.Typechecker.Context

relax :: Var v => Ord loc => Map Reference [Variance] -> Type v loc -> Type v loc Source #