teal-language/tl

Type identifying where clause doesn't work when concrete type is provided as a generic argument

オープン

#920 opened on 2025/01/26

 (6 件のコメント) (0 件のリアクション) (1 人の担当者)Lua (156 件のフォーク)batch import
good first issuesemantics

Repository metrics

Stars
 (2,794 個のスター)
PR merge metrics
 (平均マージ 1d 6h) (30d で 1 merged PR)

説明

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

コントリビューターガイド