►
From YouTube: Design meeting 2020-07-29: WF checks and type aliases
Description
No description was provided for this meeting.
If this is YOUR meeting, an easy way to fix this is to add a description to your video, wherever mtngs.io found it (probably YouTube).
A
A
Reasons:
okay,
so
let's
have
it
right.
So
the
topic
of
this
meeting
is
around
the
well-formeness
checks
of
tight,
aliases
and
there's
been
a
lot
of
this
has
come
up
again
and
again,
so
I
don't
want
to
talk
it
over
and
decide
if
and
what
we
want
to
do
about
it.
Most
recent
case
that
it
came
up
was
this
pr,
but
before
I
get
into
that,
let
me
just
dial
back
one
second
for
context.
A
A
Instead,
there's
like
a
front
end,
part
of
rusty
that
expands
type
aliases
very
early,
and
so,
if
you
have
like
type
meleus
type,
my
alias
is
u32
and
a
function
that
uses
my
alias
the
way
the
type
checker
sees
it.
It
just
sees
u32
it
kind
of
never
sees
the
my
alias
and
it
also
it
does.
It
can
see
this
definition,
but
we
today
we
ignore
them
and
so
some
consequences
of
that.
A
A
A
A
Another
consequence
of
this
is
that
there
can
be
tight
parameters
and
we
basically
just
ignore
these,
where
clauses
almost
completely
not
entirely
in
the
way
we
don't,
but
instead
we
just
substitute
the
types
in
and
if
the,
where
clauses
happen,
to
match
what
the
struct
requires,
then
that's.
Okay,.
B
A
That
sort
of
lines
up
with
the
air,
you
will
get
the
errors
you
expect,
but
otherwise
you
you
might
or
might
not
so
like
if
you
have
just
right,
alias
here
as
long
as
that
alias
is
used,
then
any
or
any
attempt
to
use.
Just.
Let
me
rephrase
that
any
attempt
to
use
just
write,
alias
with
with
a
type
x,
will
error
if
x,
debug
is
not
true,
but
not
because
we're
checking
the
alias,
but
because
that
constraint
comes
from
my
type.
A
So
the
one,
the
one
way
that
we
do
look
at
those
where
clauses
is
that
very
early
in
the
compiler
another
thing
which
probably
wants
to
change
at
some
point
we
handle,
if
you
have
an
expression
like
a
colon
colon,
an
associated
type
like
like
this,
you
will
get
an
error
because
the
compiler
doesn't
know
what
trait
item
comes
from
and
if
you're
right,
so
you
can.
You
can
avoid
that
error
in
two
ways.
You
can
write
this,
in
which
case,
depending
on
exactly
what
rules.
A
This
is
something
I
don't
actually
know
how
well
we've
defined
it,
but
you
know
this.
This
might
be
an
example
of
having
too
few
bounds,
because
in
principle
you
shouldn't
be
able
to
write
t
as
iterator
item
without
knowing
the
t
as
an
iterator,
but
you
can
also
write
this
and
the
compiler
knows
that
does
take
the
where
clause
into
account
in
that
case,
and
that's
because
this
expansion
happens
kind
of
in
that
same
very
early
phase.
That's
the
context.
A
I
guess
the
only
other
bit
of
context
is
for
a
time,
and
I
don't
remember
if
we're
still
doing
this,
let's
find
out
for
a
time
we
were
giving
warnings
if
you
had
any
where
clauses
at
all.
Let's
see
if
that's
still
true.
A
Yes,
that's
still
true,
so
we
give
a
warning
saying
the
bound
is
not
enforced,
which
is
true,
and
then
we
give
some
helpful
hints,
because
the
problem
is.
If
I
just
take
this
bound
away,
then
I
get
an
error
because
it
doesn't
know
what
to
do
so.
We
give
a
hint
saying
you
can
write
this
in
this
more
painful
way,
although
in
basically
every
crate
that
I've
ever
had.
I
just
disable
this
annoying
link,
because
I
don't
want
to
write
that
more
explicit
way.
A
A
If
we
can,
we
can
maybe
decide
what
we
think
the
behavior
ought
to
be.
We
could
also
decide
how
important
it
is
and
if
we
want
to
do
any
incremental
steps
towards
that
behavior
like
take
it
around
the
edition,
especially
if
so
I'd
prefer
to
think
about
it.
Now,
because
last
time
eddie
b
decided
to
do
some
experiments
close
to
the
rust
2018
timeline
that
just
didn't
work.
We
just
we
wound
up
not
doing
them,
because
it
was
too
stressful
to
try
it
like
it's,
not
that
important
to
land
compared
to
like
nll.
A
So
I
think
if
we
are
going
to
think
about
this,
we
want
to
be
thinking
about
it
on
the
earlier
side.
So
I'll
stop
there
for
a
second,
because
I've
been
lecturing
for
a
while.
Does
that
all
make
sense,
any
questions.
A
B
B
Makes
sense
so
far,
it
seems
particularly
problematic
that
we
have
a
case
where
we
error.
If
you
do
one
thing
and
warn,
if
you
do
it
correctly,
that's
definitely
something
we
should
try
to
avoid
in
the
compiler
anywhere
anywhere
we
can,
but
the
general
problem
seems
relevant
as
well.
That
one
just
seems
like
a
case
study
in
how
bad
this
is.
A
In
other
words,
I
would
expect
that
you
have
to.
We
have
to
check
that
you
is
legal
given
what
we
know
about
the
generic
types
at
the
declaration,
and
then,
if
we
know
that,
then
we
automatically
know
that
all
uses
of
who
must
be
legal,
because
unless
as
long
as
they
meet
whatever,
where
clauses
are
in
scope,.
C
A
C:
yeah,
okay,
yes,
I
don't
mean
you're
right,
I
don't
well.
The
last
field
of
a
struct
is
not
required
to
be
sized
actually,
but
I
don't
mean
it
that
literally.
A
I
suppose,
although
I
did
write
it
very
literally,
but
I
meant
like
basically,
I
would
expect
us
to
check
the
type
at
the
point
of
declaration
that
it's
valid,
given
the
where
clauses
that
are
declared
on
the
type,
I
think
that's
my
naive
expectation,
I'm
not
sure
that
actually
has
great
user
experience
like
for
the
same
reason
that
we
wanted
to
do
implied
bounds,
which
we
haven't
kind
of
gotten
around
to
yet.
A
A
That
you
know
you've
been
saying
we
want
to
be
able
to
assume
in
like
an
impul.
That
t
is
a
debug.
Maybe
you
could
make
a
case
for
type
aliases
behaving
in
a
similar
way.
I
don't
know
which
I
guess
is
the
next
point.
So
one
thing
I
was
thinking
about
is
that
we
could
rationalize
the
current
behavior
in
a
sense
like
right.
Now
it
has
no.
I
don't
think
you
can
explain
it
in
terms
of
a
traditional
type
system.
A
You
have
to
explain
it
in
terms
of
like
macro
expansion
in
the
compiler,
but
I
think
you
could
explain
it
in
terms
of
a
more
chalk
like
type
system,
if
you
assume
that
when
you
see
this
syntax
of
a
type
alias
it's
kind
of
short
for
this,
which
is
not
actual
syntax,
but
it
is
something
that
chalk
can
represent
and
it's
the
basis
of
how
you
do
implied
bounds,
which
is
to
say
that
you
have
this,
like
you,
add,
essentially
a
where
clause
saying
that
this
type
alias
gets
to
assume
that
the
right
hand
side
is
valid,
and
then
now
it's
on
the
user
to
prove
that,
where
cause
is
true,
that's
effectively
what
our
behavior
is
de
facto
right,
and
I
would
note
that
we
are
going
to
have
to
do
something
similar
around
functions.
A
C
I
wasn't
sure
if
you
were
talking
about
initially
the
type
definition,
the
type
alice
itself,
somehow
causing
implied
balance
somewhere
downstream
to
be
inferred.
But
I
don't
think
that's
what
you're
talking
about
you're
talking
about
a
struct
upstream,
it's
implied
bounce
affecting
a
type
alias
that
uses
that
struct
right.
A
A
This,
it
just
seems
like
kind
of
annoying
boilerplate
that
I
have
to
copy
and
paste
all
these
wear
closes,
and
so
it
might
be
nice
if
I
didn't
have
to
do
that,
and
this
would
be
one
way
that
you
could
sort
of
avoid
doing
that
now.
There's
another
question:
that's
like
relating
to
implied
bounds,
which
is
like
if
I,
if
I
wrote
this
in
some
function,.
A
A
C
A
Yeah,
I
can
explain
how
that
would
tie
together.
So
the
way
that
implied
bounds
worked
was
that
in
the
way
it's
sort
of
designed
in
chalk,
at
least,
is
that
you
have
these
well-formed
predicates,
like
I
wrote
there,
that
we
don't
no
one
ever
writes
them
explicitly
at
least
not
today,
but
they
come
from.
A
The
context
where
you
are
so
functions
get
to
assume
that
their
parameters
are
well
formed
and
impulse
get
to
assume
that
the
types
in
the
trait
are
well
formed,
and
we
know,
and
chalk
has
some
rules
that
say
like
if
I
get
to
assume
that
this
type
is
well
formed.
That
implies
that
I
can
assume
some
other
things
similar
to
super
traits
the
same.
A
In
fact
it
subsumes
the
super
trade
mechanism,
so
we're
saying
like
in
the
same
way
that
if
I
know
that
t
is-
or
I
know
that
it's
partial
ord,
if
I
know
that
my
type
t
is
well
formed-
I
know
that
t
is
debug,
because
that's
the
requirement
for
t
to
be
for
my
tech
to
be
well
from
so
there's
kind
of
a
bi-directional
relationship.
A
I
guess,
and
so
if
you
set
it
up
that
way,
the
way
that
this
would
fall
out,
this
function
would
get
to
assume
that
this
type,
alias
is
well-formed,
which
would
in
turn
imply
that
the
right-hand
side
is
well-formed,
which
would
in
turn
imply
whatever
that
implies.
I
guess
that
csd
or
something
I
think
you
could.
You
could
make
that
all
fall
out
reasonably
well.
Does
that
answer
your
question.
A
A
This
explains
why
we
can
accept
examples
like
too
few,
but
because
we
get
to
assume
that
the
right
hand
side
is
well
formed,
even
if
we
don't
have
enough,
where
clauses
to
justify
that,
but
it
doesn't
prevent
you
from
adding
extra
bounds
and
the
way
I
had
sort
of
expected
to
do.
That
is
that
we
would
move
the
handling
of
aliases
so
that
they're
part
of
like
chalks,
they're
kind
of
more,
like
associated
types
and
chalk,
is
chalk
and
the
type
checker
or
know
about
them
as
they're.
A
Just
a
they're,
just
another
type
that
we
happen
to
know
is
equal
to
its
right-hand
side
and
we
propagate
that
through.
But
in
which
case
we
could
enforce
the
bounds.
A
However,
that
would
be
backwards
incompatible
because
now
code
that
exists
today.
That
uses
too
many
bounds
and
doesn't
get
any
errors,
for
it
would
start
to
get
errors,
and
I
don't
know
how
well
we
could
probably
handle
that
over.
In
addition
with
some
thought,
but
there
is
one
particular
case-
that's
really
relevant
that
I
want
to
bring
up
because
eddie
with
all
that
context.
Eddie
did
some
experiments
and
I
I
didn't
have
time
to
write
down
all
the
experiments
they
did.
A
I
think
we
can
go
look
them
up,
but
one
of
the
ones
was
looking
for
cases
where
there
were
too
many
bounds
kind
of
similar
to
the
drop
check
code
that
you
wrote
so
long
ago.
Felix
and
the
one
case
that
was
really
common
was
a
type
alias
like
this,
where
actually
there's
too
many
bounds,
because
this
would
be
the
strictly
most
general
version
of
that
cybilius,
and
so
this,
I
think,
is
a
good
example
of
like
a
kind
of
ergonomic
regression
hiding
inside
the
implied
bounds
approach
where,
if
you
assume
that.
A
The
use
the
user
doesn't
have
to
write
all
the
bounds.
They
would
need
for
the
right
hand,
side,
but
any
bounds
they
do
write
are
respected.
Then
they're
implicitly
writing
a
bound
here.
They
may
not
have
written.
I
guess
is
the
point,
and
maybe
that's
okay
and
we
just
like
that's
what
we
do
everywhere
else.
Where
this
happens.
You
have
a
struct
declaration,
you
have
to
propagate
the
question
mark
size
and
but
it's
something
we
would
have
to
manage
intelligently.
C
Or
we
could,
this
may
be
bonkers,
we
could
make
type,
aliases
implicitly
have
question
mark
sized
and
if
you
want
to
enforce
size
in
this
bound,
you
have
to
say
it's
an
interesting
point.
So.
A
If
you
think
about
it,
just
does
that
check?
That's
exactly
what
the
code
is
today.
C
A
A
C
A
Yes,
exactly
we're
losing
that
as
a
size.
That's
a
really
good
point
so
I'll,
so
that
might
be
like
the
the
sweet
spot.
In
terms
of
I
have
to
write
as
little
as
possible.
At
least
is
you
don't
get
any
question
marks
high?
You
get
question
mark
size
by
default
and
we
assume
the
right-hand
side
is
valid.
A
A
So
like
what's
an
example
of
I
don't
know,
I
guess
something
like
this.
A
Now
this
is
okay.
I
guess
this
is
heading
towards,
in
my
view,
the
naive
rules,
like
not
the
implied,
bounds
variation,
because
it's
a
sort
of
subset
of
the
errors
we
would
ultimately
want,
whereas
in
the
implied
balance
variation
that
I
was
describing,
there
would
never
be
an
error
here
unless
it
was
used
to
sort
of
meet
the
behavior
we
have
today.
A
So
yes,
the
answer
is
yes
and
I
didn't
get
to
get
around
to
fully
collecting
all
the
results
and
they're
pretty
dated
they're
like
years
old
by
now,
but
even
at
that
time,
eddie
did
a
number
of
experiments
and
we
can
probably
dig
some
of
them
up
and
what
they
found
was
that
some
parts
of
it
were
not
particularly
didn't
affect
a
lot
of
crates,
but
I
think
the
biggest,
but
some
parts
did
that's
what
all
these
pr's
were.
A
A
C
It's
clear
to
just
comment
here
that
eddie
did
consider
where
consider
what
we
were
just
what
we
were
talking
about
about
making
sizedness,
not
implicit
in
a
type
alias,
although
it
maybe
didn't
go
as
far
as
what
you
were
talking
about
with
implied
bounds.
So
yeah.
A
A
A
A
A
C
But
you
know,
under
the
definition
only
the
hypothetical
semantics
that
we're
talking
about
it
shouldn't
be
wrong
to
have
extra
bounds
right
in
terms
of
like
using
the
struct
based
samantha,
their
struck
base
analogy
earlier.
It's
only
wrong
if
there
are
uses
that
don't
meet
those
right,
but
it
seemed
like
eddie's
code
that
experiments
pointed
at
was
not
was
going
further
right,
that's
what
the
he
was
enforcing
it
at
the
declaration.
A
C
A
I
guess
the
yeah,
and
so
it's
quite
possible
that
if
we
just
changed
to
the
side,
like
it's
quite
possible
that
although
the
declaration
site
has
extra
bounds,
all
the
uses
meet
them,
even
though
we're
not
enforcing
it,
and
so
there
would
actually
be
a
silent
like
if
we
actually
just
changed
it.
It
would
have
less
impact
or
there'd
be
no
in
there.
A
A
A
Incrementally
towards
something
or
just
wait,
figure
out
the
implied,
bound
story
and
leave
it
as
is
basically
it's
not
getting
any
worse
or
better
than
it
currently
is
until
we
have
so
we're
in
a
better
position.
But
I
have.
C
C
There
was
one
subtlety
earlier
josh
I
figured,
I
wouldn't
bring
it
up,
but
you
know
you
made
the
point
that
the
warning
given
by
the
current
system
is,
you
know,
warning
you
about
the
ballot
version
of
the
code.
I
think
that
what
what's
the
right
word,
I'm
being
pedantic,
I
think
it
does
tell
you.
The
warning
tells
you
a
third
variant
of
the
code
that
I
think
would
be
accepted
and
isn't
the
one
that
leaves
out
the
well?
No,
it
doesn't
got
the
bounds,
but
it
has
the
it's
the
whole.
C
B
Right,
I
was
going
to
say
I
tend
to
treat
any
case
where
you
have
to
write
out
some
type
as
some
trait
in
angle,
brackets
colon
calling
something
right.
If
that's
the
only
way
to
write
something,
we've
done
something
wrong.
B
B
In
the
absence
of
the
concern
about
breaking
existing
code,
I
would
love
to
just
completely
enforce
well-formedness
on
type
aliases
and
require
that
you
specify
all
of
the
necessary
trait
prerequisites.
B
You
know,
but
I
would
be
all
for
finding
substantial
subsets
of
this,
that
we
can
do
and
then
adding
a
you
know
making
it
making
it
an
error
for,
say
you
specified
some
traits,
but
not
enough
or
you
specified
too
many
traits
and
then,
if
the
primary
case
that
people
would
get
an
obscene
amount
of
warnings
about,
is
you
didn't
specify
any
traits
at
all?
B
Exactly
yeah
the
goal
being
that
way,
we
would
hopefully
get
some
substantial
warnings
to
get
people
to
fix,
but
not
worn
on
every
use
of
type
aliases
on
a
generic,
because
the
majority
of
type
aliases
on
generics
seem
to
be
just
t
on
the
left
and
t
on
the
right.
C
C
Let
me
let
me
take
a
step
back,
I
guess
and
say
what
I
do
know
so.
I've
been
thinking
about
this,
like
from
the
start
of
this
conversation
in
this
meeting
in
the
back
of
my
head,
is
always
like
okay.
Well,
could
we
make
this
change
but
put
it
under
some
sort
of
future
incompatibility
warning
type
thing
right
and
usually
the
answer
for
things
in
the
type
system
are
no.
C
We
can't
because
it's
not
feasible
to
actually
like
detect
the
you
know
the
thing
that's
causing
the
problem
and
run
the
code
sort
of
before
and
after,
like
might
get
the
two
different
versions
of
it
in
any
straightforward
way.
So
I'm
assuming
that
this
is
that's
the
story
here
too.
C
As
far
as
I
can
tell,
and
so
I'm
a
little
worried
that
you
might,
you
might
run
into
something
similar
here
with
what
you're
describing
of
you
know,
trying
to
treat
the
no
given
bounds
a
special
case,
but
maybe
not
maybe,
since
it's
something
you
can
do
up
front
syntactically.
Maybe
that
gives
us
sort
of
a
secret
door
we'll
see.
Let's
see
what
niko
thinks,
at
least
of
that
hypothetical.
B
One
other
thing
worth
mentioning
here
is:
I
do
actually
like
implied
bounds
in
other
contexts
and
in
particular
I
find
it
to
be
painful
when
I
have
a
type
that
has
two
or
three
bounds
on
it,
especially
if
they're
complex
bounds
and
every
single
time.
I
write
that
trait
in
a
fin.
I
find
myself
restating
all
of
its
required
bounds
on
just
to
be
able
to
name
its
generic
parameters.
B
B
B
A
B
What
I
was
proposing
was
I
don't
like
having
to
re-specify
bounds
that
a
type
already
has
in
it,
and
I
have
run
into
that
many
times
in
not
in
the
type
alias
case,
but
in
the
type
case
in
general,
I've
got
a
type
or
a
trait
that
requires
four
bounds
and
they're
complicated
bounds,
and
I'm
writing
a
bunch
of
functions
that
take
that
type
and
every
one
of
those
functions.
B
Some
type
of
t
it
would
be
the
same
case
as
implied
bounds.
What
I'm
arguing
is,
if
you
specify
any
bounds,
then
you
shouldn't
specify
too
few
or
too
many
bounds,
because
that
implies
that
you
think
you
are
matching
the
type
on
the
right
and
you're.
Not
so
that's
worth
warning
about,
but
if
you
don't
say
anything
at
all,
if
you
don't
say
any
bounds,
then
treating
that
as
implied
bounds
seems
reasonable.
C
So
I
have
a
similar
pink
attitude,
except
that
the
detail
about
write
down
bounds.
I
think
you
should
be
allowed
to
write
down
extra
bounds
and
it
shouldn't
matter
about
the
right-hand
side.
If
it's
it's
to
me,
you
could.
You
should
be
allowed
to
specify
bounds
and
make
this
that's
a
statement
about
how
you
want
this
type
alice
to
be
used.
C
C
Our
situation
right
now
is
that
we
can't
we're
not
even
forcing
the
bounty
to
declare
what
what
josh
one
thing
josh
had
said.
While
you
were
absent
niko,
I
don't
think
you
caught
it.
B
B
B
I
think
your
point
is
reasonable.
Felix.
You
could
specify
too
many
bounds
and
then
we
actually
enforce
them
saying
if
you're
going
to
use
this
type
alias.
I
expect
that
you
also
have
this
found.
I
think
that's
reasonable.
As
long
as
we
actually
enforce
it.
I
think
those
are
both
reasonable
strategies
either.
We
tell
you
that
you've
done
too
many
bounds
on
your
type,
alias
right
at
the
point
where
you
make
the
type
alias
or
we
actually
enforce
the
full
balance
that
you
specify
on
a
type
alias,
even
if
they're
too
strict.
B
A
A
I
think
I
feel
the
same
as
felix
that
I
expect
I
definitely
I
expect
any
bounds.
I
write
should
be
enforced
and
I
don't
see
why,
if
you're
allowed
to
write
bounds,
you
should
be
forced
to
write
just
the
right
set.
That
seems
like
a
little
strange
to
me.
Apart
from
the
reality
of
this,
I
was
implementing.
Of
course,
I
don't.
A
A
Certain
things
are
like
the
sources
of
implied
bonds
and
they
have
to
list
out
all
the
correct
rounds
and
other
things
are
like
consumers
of
implied
balance,
and
they
don't
have
to
list
them
out.
So
it's
only
kind
of
one
hop
away
in
principle.
Right,
like
the
function,
you
see
the
type
used
you
can
jump
to
the
type
and
you
you
know
from
that
immediate
type
definition,
not
by
examining
all
the
types
of
all
its
fields.
A
A
I
guess
that
with
type
aliases,
nothing
really
changes.
It's
just
that
you
have
to
know
to
go
through
a
type
alias
to
the
underlying
type.
I
don't
know
somehow
it
it
didn't.
Quite
there
was
like
a
pattern
match
that
I
was
having
of.
When
do
you?
How
do
you
remember
when
you
have
to
write
bounds
and
it
was
like
in
types
you
do.
I
mean
functions,
you
don't
it
didn't,
it
doesn't
match,
but
I
don't.
I
don't
know
how
much
that's.
Definitely
matters.
B
A
C
C
We
have
a
roadmap
for
when
further
implied
bounds.
Work
is
that
a
separate
meeting
topic.
A
I've
sort
of
been
thinking
of
it,
as
this
is
something
we
would
do
once
we
transition
over
to
a
more
chocolate
setup,
because
we
encoded
it
as
chocolate
rules,
and
that
might
be
it's
taking
a
while
there
could
be
a
way
to
do
it.
I
haven't
thought
hard
about
how
to
do
it
in
today's
type
checker,
but
I
guess
it's
probably
possible
I'll
see
why
it
wouldn't
comfortable
in.
A
A
A
I
guess
I
guess
I
can
kind
of
show
my
cards.
I
don't
know
that
I
do
I
care
about.
I
think
we
have
a
lot
of
problems,
you
know,
and
it
just
doesn't
somehow.
I
feel
like
the
current
setup
can
continue
and
until
like
implied
bounds
or
whatever
is
there
and
then
we
can
think
about
it,
and
I
could
live
with
that.
C
A
And
in
particular
I
guess
like
do
we
want
to
land
pr's
that
are
making
warnings
around
or
errors
around
narrow
cases
progressively
moving,
but
if
that
sort
of
implies,
we
know
it
seemed
like
progressively
moving
towards
the
naive
approach.
Is
the
easier
one
to
do?
I
don't
know.
A
There
is
a
this
is
there's
another
case
where
I
think
we're
going
to
have
to
do
something
like
this
implied
bounce
approach
for
backwards
compatibility,
which
is
at
least
I've
been
assuming
we
would,
which
is
in
function
types
when
you
have
higher
ranked
function.
Types
like
this
today,
if
you
have
some
type
in
here
that
that
references
this
take
a
or
whatever,
let's
just
call
it
like
foo
of
ampersand
take
a
c
or
something.
A
We
basically
don't
check
that
for
well
forming
this
at
all.
Until
you
call
the
function
at
which
point,
we
know
what
tick
a
is,
and
I
have
been
assuming
we're
going
to
change
function,
pointers
over
to
a
similar
implied
balance
approach.
This
is
what
we
me
and
scale
xm
thought
about
a
while
back
where
basically,
this
also
is
needed
to
close
the
sound.
This
whole
side
note,
but
basically,
this
function
type
is
kind
of
shorthand
for
one.
That
just
again
is
not
valid
syntax,
but
you
know
deal.
A
Maybe
you
can
imagine
what
it
means
it
sort
of
says
when
you
call
this
function,
you
have
to
prove
this
where
clause,
but
but
the
type
gets
to
assume
it's
true,
and
so
now
this
function
type
is
sort
of
well
formed
in
a
trivial
way.
That's
basically
similar
what
we
do
today
right
but
again,
rationalized-
and
this
seems
okay,
but
there
is
this
examples
of
like
what,
if
it
doesn't
matter,
what
tick
a
is
the
the
type
is
never
well
formed.
A
A
Bound
lifetimes
so,
like
the
second
argument
would
get
an
error
and
the
first
one
might
would
not
even
if
they're,
both
errors,
and
so
what
I
imagine
might
be,
the
the
longer
term
path
in
the
would
be
something
like
technically,
the
type
is
legal,
but
you
get
a
lint
warning
that
says
by
the
way,
this
will
never
like
any
use
of
this
type
will
be
an
error
or
something
like
that,
in
which
case
we
could
also
start
warning
like.
A
A
I
would
want
that,
no
matter
what
I
don't
want
to
wait
until
I
use
the
type
alias
to
find
out
that
it's
never
going
to
be
valid,
so
we
could
start
landing
pr's
of
that
kind,
and
then
that
already
may
help
migrate
people
towards
something
at
least
they
won't
have
utterly
broken
code
out
there.
C
C
You
know
we're
always
talking
we're
only
talking
about
doing
linting
cases
where
it's
certainly
going
to
be
an
error.
If
it's
used
right,
not
something
where,
if
there's
cases
where
it
could
be
used
usefully
and
like
we're
graduating,
we
could
be
considered
a
bug
for
us
to
report
a
link
saying
this
type
could
never
be
used
and
someone's
like,
but
here
I
use
it
over
here
and
it
doesn't
cause
any
error
right.
That
would
be
considered
a
bug
and
wind
in
that
case.
Yes,.
A
C
A
A
C
A
Think
that
yeah
I
mean
we
can
make
it
a
future
compatibility
warning.
It's
a.
I
don't
have
a
strong
feeling
yet
about
whether
I
think
about
what
I
think
I
guess.
The
only
reason
I
hesitate
is
that
if
this
were
the
formal
definition
that
we
have
a
well-formed
aware
clause
like
this,
then
I
don't
quite
understand
how
the
compiler
would
sort
of
sorry.
This
would
actually
be.
A
There
would
actually
be
two
web
clauses,
and
the
point
is
that
I
don't
know
how
the
compiler,
like
it's
been
told
to
assume
that
this
is
valid.
So
on
what
basis
does
it
issue
an
error?
You
know
what
I
mean,
so
it
feels
like
it's
weird
for
me
to
be
an
error,
but
a
lint
can
have
special
extra
reasoning
about,
like
I've
been
told
to
assume
this
is
valid,
but
that
type
that
I'm
told
to
assume
is
valid
can
never
be
valid.
So
I
don't
know.
C
A
I
think,
by
the
same
token,
like
I
forget
what
we
do
now,
I
think
we
have
kind
of
weird
behavior,
because
the
compiler
is
not
as
principal
as
it
could
be,
but
by
the
same
token,
linting
against
limping
against.
Where
causes
that
can
never
be
satisfied,
make
sense
to
me,
I'm
not.
I
think
today,
they're
actually
illegal,
but
I
think
they
shouldn't.
A
Yeah
today,
they're
illegal,
I
think
that's
wrong.
I
think
we
even
had
some
prs.
I
think
we
even
had
like
an
rc
or
pr
that
was
trying
to
change
that.
I
can't
remember,
but
I
think,
if
we
went
to
a
chocolate
world,
they
would
not
be
illegal,
they
would
just
work
or
just
be
saying.
Okay,
I'm
going
to
assume
that's
true,
even
though
it's
not.