# typed: strong

module ITypeAssert

extend T::Sig
extend T::Generic

Elem = type_member(:out)

abstract!

sig { abstract.params(val: T.untyped).returns(Elem) }
def assert(val); end

end

module TypeAssertImpl; end

class TA

extend T::Sig
extend T::Generic
include ITypeAssert
extend TypeAssertImpl

Elem = type_member

sig { override.params(val: T.untyped).returns(Elem) }
def assert(val); end

end