teal-language/tl

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

Aberta

#920 aberto em 26 de jan. de 2025

 (6 comentários) (0 reação) (1 responsável)Lua (156 forks)batch import
good first issuesemantics

Métricas do repositório

Stars
 (2.808 estrelas)
Métricas de merge de PR
 (Mesclagem média 1d 6h) (1 fundiu PR em 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

Guia do colaborador