hobbes
a language, embedded compiler, and runtime for efficient dynamic expression evaluation, data storage and analysis
consrecord.H
Go to the documentation of this file.
1 
2 #ifndef HOBBES_LANG_TYPEPREDS_CONSRECORD_HPP_INCLUDED
3 #define HOBBES_LANG_TYPEPREDS_CONSRECORD_HPP_INCLUDED
4 
6 
7 namespace hobbes {
8 
9 // a 'consrecord' constraint asserts that a type is a record with a head type and a tail type
10 // e.g.:
11 // yes: ConsRecord {x:int,y:bool} int {y:bool}
12 // no: ConsRecord {x:int,y:bool} bool {x:int} (doesn't match structure, x should come first)
13 //
14 // for syntactic convenience, this constraint conditionally works for either records or tuples
15 // (tuples are treated as a special case of records where the field names are unimportant and are hidden)
16 //
17 // this constraint can be inferred "forward" (when deconstructing a large record into smaller parts),
18 // or it can be inferred "backward" (when constructing a large record from smaller parts)
19 // a 'record deconstructor' is a scheme for consuming record type structures at compile-time
21 public:
22  static std::string constraintName();
23 
24  // unqualifier interface
26  bool satisfied(const TEnvPtr&,const ConstraintPtr&,Definitions*) const;
27  bool satisfiable(const TEnvPtr&,const ConstraintPtr&,Definitions*) const;
28  void explain(const TEnvPtr& tenv, const ConstraintPtr& cst, const ExprPtr& e, Definitions* ds, annmsgs* msgs);
29  ExprPtr unqualify(const TEnvPtr&,const ConstraintPtr&, const ExprPtr&, Definitions*) const;
30  PolyTypePtr lookup (const std::string& vn) const;
31  SymSet bindings () const;
32  FunDeps dependencies(const ConstraintPtr&) const;
33 };
34 
35 }
36 
37 #endif
38 
std::shared_ptr< PolyType > PolyTypePtr
Definition: type.H:23
Definition: tyunqualify.H:20
void explain(const TEnvPtr &tenv, const ConstraintPtr &cst, const ExprPtr &e, Definitions *ds, annmsgs *msgs)
Definition: consrecord.C:153
static std::string constraintName()
Definition: consrecord.C:65
FunDeps dependencies(const ConstraintPtr &) const
Definition: consrecord.C:179
bool satisfied(const TEnvPtr &, const ConstraintPtr &, Definitions *) const
Definition: consrecord.C:105
SymSet bindings() const
Definition: consrecord.C:170
std::set< std::string > SymSet
Definition: tyunqualify.H:12
Definition: consrecord.H:20
Definition: boot.H:7
bool satisfiable(const TEnvPtr &, const ConstraintPtr &, Definitions *) const
Definition: consrecord.C:144
std::vector< FunDep > FunDeps
Definition: tyunqualify.H:17
bool refine(const TEnvPtr &, const ConstraintPtr &, MonoTypeUnifier *, Definitions *)
Definition: consrecord.C:69
ExprPtr unqualify(const TEnvPtr &, const ConstraintPtr &, const ExprPtr &, Definitions *) const
Definition: consrecord.C:261
Definition: typeinf.H:29
std::shared_ptr< Expr > ExprPtr
Definition: expr.H:58
PolyTypePtr lookup(const std::string &vn) const
Definition: consrecord.C:156
std::shared_ptr< TEnv > TEnvPtr
Definition: type.H:80
std::vector< Definition > Definitions
Definition: expr.H:62
std::shared_ptr< Constraint > ConstraintPtr
Definition: type.H:33
std::vector< annmsg > annmsgs
Definition: lannotation.H:58