-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Description
Hi, firstly thanks for an excellent library!
I have discovered that annotated types are not validated by the checker correctly.
I have reduced it down to the following test:
type = {:ann_type, 0, [{:var, 0, :annotation}, {:atom, 0, :atom}]}
term = :atom
typespec = Code.Typespec.type_to_quoted(type) |> Macro.to_string()
assert typespec == "ann_type(annotation, :atom) :: 0"
assert RTypes.Checker.check(term, type) == :ok
=> {:error, [term: :atom, message: "term does not conform to type", types: [{:ann_type, 0, [{:var, 0, :annotation}, {:atom, 0, :atom}]}], ctx: []]}
I'm happy to attempt a fix, but I wanted to check [sic] whether adding another function head to checker.ex is the right approach. Something like this:
## annotations
defp check(term, {:ann_type, _, [{:var, _, annotation}, typ]}, ctx) do
case check(term, typ, ctx) do
:ok ->
:ok
{:error, _} ->
{:error,
term: term,
message: "term does not match annotated #{annotation} type",
types: [typ],
ctx: ctx}
end
end
I've got this in a branch, if you're happy with it, or have suggestions to improve?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels