teal-language/tl
View on GitHubType identifying where clause doesn't work when concrete type is provided as a generic argument
Open
#920 opened on Jan 26, 2025
good first issuesemantics
Repository metrics
- Stars
- (1,085 stars)
- PR merge metrics
- (Avg merge 1d 6h) (1 merged PR in 30d)
Description
Example:
local interface IFoo
get_type: function(self): string
end
local record Foo is IFoo where self:get_type() == "foo"
end
function Foo:get_type():string
return "foo"
end
function Foo.new():Foo
return setmetatable({}, { __index = Foo })
end
local function create_foo():IFoo
return Foo.new()
end
local function process_foo<T>(foo:IFoo):T
-- This works:
-- return foo as T
-- This does not:
-- Does not compile due to errors:
-- "cannot resolve a type for foo here"
-- "foo (of type IFoo) can never be a T"
assert(foo is T)
return foo
end
local foo1 = create_foo()
local _foo2:Foo = process_foo(foo1)
assert(foo1 is Foo) -- this works fine