Skip to content

Commit

Permalink
eval: improve type description for primops and applied primops
Browse files Browse the repository at this point in the history
This can make type errors a little easier to understand.
  • Loading branch information
lheckemann committed Mar 21, 2019
1 parent 6a3dfcb commit 2aa89da
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions src/libexpr/eval.cc
Expand Up @@ -130,6 +130,16 @@ std::ostream & operator << (std::ostream & str, const Value & v)
}


const Value *getPrimOp(const Value &v) {
const Value * primOp = &v;
while (primOp->type == tPrimOpApp) {
primOp = primOp->primOpApp.left;
}
assert(primOp->type == tPrimOp);
return primOp;
}


string showType(const Value & v)
{
switch (v.type) {
Expand All @@ -144,8 +154,10 @@ string showType(const Value & v)
case tApp: return "a function application";
case tLambda: return "a function";
case tBlackhole: return "a black hole";
case tPrimOp: return "a built-in function";
case tPrimOpApp: return "a partially applied built-in function";
case tPrimOp:
return fmt("the built-in function '%s'", string(v.primOp->name));
case tPrimOpApp:
return fmt("the partially applied built-in function '%s'", string(getPrimOp(v)->primOp->name));
case tExternal: return v.external->showType();
case tFloat: return "a float";
}
Expand Down

0 comments on commit 2aa89da

Please sign in to comment.