# Naming Some\[Trait\] and \*SomeTypeList\[Trait\]

**URL:** <https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972>\
**Category:** Standard Library\
**Tags:** discussion, mojo-language-design\
**Created:** [April 16, 2026, 3:10pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972 "2026-04-16T15:10:06Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![christoph\_schlumpf](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/christoph_schlumpf/32/274_2.png) [@christoph\_schlumpf](https://forum.modular.com/u/christoph_schlumpf)\
**Post date:** [April 16, 2026, 3:10pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/1 "2026-04-16T15:10:06Z")

</div>

Based on the following Discord post I start this discussion to decide on the naming of `Some` and `SomeTypeList`.

> **[Discord - Group Chat That’s All Fun & Games](https://discord.com/channels/1087530497313357884/1224434323193594059/1494331156412498081)**
>
> Discord is great for playing games and chilling with friends, or even building a worldwide community. Customize your own space to talk, play, and hang out.

`Some` can be used to implicitly declare a type parameter while `*SomeTypeList` can be used to implicitly declare variadic type parameters.

While I think the current naming is viable, `*SomeTypeList` is quite verbose.

Possible alternatives (updated):

- `Some`/`*SomeTypeList` (the current naming)
- `Some`/`*SomeTypes` (less verbose)
- `SomeType`/`*SomeTypes` (more consistent?)
- `Some`/`*Each` (short and expressive?)
- `Impl`/`*ImplList`
- `Impl`/`*ImplEach`
- …

Maybe not feasible:

- `Type`/`*Types` (`Type` is a reserved keyword)
- `Some`/`*Some` (same name for both not possible?)

Example

```mojo
# current naming

def foo[T: Copyable, //](arg: T) -> Int: ...

def foo(arg: Some[Copyable]) -> Int: ...

def bar[*Ts: Copyable](*args: *Ts) -> Int: ...

def bar(*args: *SomeTypeList[Copyable]) -> Int: ...

# one alternativ

def bar(*args: *Each[Copyable]) -> Int: ...

```

The great thing is that `Some` and `SomeTypeList` are „just“ comptime type alias and not hardcoded compiler keywords.

BTW: `Some` is already in the stdlib for quite some 😉 time while `SomeTypeList` is new. [[mojo-lang] Enable autoparam of variadic pack type lists. · modular/modular@b964941 · GitHub](https://github.com/modular/modular/commit/b9649411c487fe5e57db0a90b04a90d6658509bc)  
The `Some` name was already discussed and decided on in this issue: [[Feature Request] Rename `InstanceOf` to express trait implementation · Issue #5166 · modular/modular · GitHub](https://github.com/modular/modular/issues/5166)

`some` is used in Swift too.

---

<div class="post-metadata">

**Author:** ![martinvuyk](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/martinvuyk/32/48_2.png) [@martinvuyk](https://forum.modular.com/u/martinvuyk)\
**Post date:** [April 16, 2026, 3:53pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/2 "2026-04-16T15:53:37Z")

</div>

> `SomeType`/`*SomeTypes`

I can see the value in going in this direction due to consistency and clarity

but I’m not a fan of making `Some` more verbose given we already have quite descriptive and long-named traits. I’m not opposed to doing it though, since it does provide value in bringing clarity for people unfamiliar with the concept.

I’m 100% pro `*SomeTypes` above the other cited options, it still follows the lead of our current and alternative `Some` naming.

However, if somebody does come up with an interesting alternative (for `Some` or `SomeTypes`) I think it’s worth hearing.

---

<div class="post-metadata">

**Author:** ![christoph\_schlumpf](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/christoph_schlumpf/32/274_2.png) [@christoph\_schlumpf](https://forum.modular.com/u/christoph_schlumpf)\
**Post date:** [April 16, 2026, 4:10pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/3 "2026-04-16T16:10:36Z")

</div>

In an ideal world I would prefer  
`Some`/`*Some`  
but I think that‘s not possible with the current language constructs and implementation as comptime type alias.

---

<div class="post-metadata">

**Author:** ![christoph\_schlumpf](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/christoph_schlumpf/32/274_2.png) [@christoph\_schlumpf](https://forum.modular.com/u/christoph_schlumpf)\
**Post date:** [April 16, 2026, 5:39pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/4 "2026-04-16T17:39:23Z")

</div>

I added your proposal to the list.

---

<div class="post-metadata">

**Author:** ![rd4com](https://avatars.discourse-cdn.com/v4/letter/r/cdc98d/32.png) [@rd4com](https://forum.modular.com/u/rd4com)\
**Post date:** [April 16, 2026, 8:49pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/5 "2026-04-16T20:49:37Z")

</div>

What about something like `Type[Movable]` and `Types[Movable]`,  
i know that “Type” is an keyword we might need later,  
just an idea 👍

---

<div class="post-metadata">

**Author:** ![duck\_tape](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/duck_tape/32/432_2.png) [@duck\_tape](https://forum.modular.com/u/duck_tape)\
**Post date:** [April 17, 2026, 10:49am UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/6 "2026-04-17T10:49:52Z")

</div>

Why not `Impl` and `ImplList`? Reading back through the old Github thread, there was never a strong reason not to use `Impl` and `Some` now has two strikes against it: collision with `Optional` variants (in our heads at least), and it doesn’t translate nicely to `SomeList`.

```mojo
def foo[T: Copyable, //](arg: T) -> Int: ...

def foo(arg: Impl[Copyable]) -> Int: ...

def bar[*Ts: Copyable](*args: *Ts) -> Int: ...

def bar(*args: *ImplList[Copyable]) -> Int: ...

```

---

<div class="post-metadata">

**Author:** ![christoph\_schlumpf](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/christoph_schlumpf/32/274_2.png) [@christoph\_schlumpf](https://forum.modular.com/u/christoph_schlumpf)\
**Post date:** [April 17, 2026, 11:13am UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/7 "2026-04-17T11:13:24Z")

</div>

OK, I add it to to list of possible alternatives.

---

<div class="post-metadata">

**Author:** ![JulianJS](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/julianjs/32/1032_2.png) [@JulianJS](https://forum.modular.com/u/JulianJS)\
**Post date:** [April 17, 2026, 8:27pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/8 "2026-04-17T20:27:11Z")

</div>

IMO The current version feels a little weird

- Some
- SomeTypeList

I think “Each” fits nice.

- Some
- Each

And to throw in another option which combines other suggestions:

- Impl
- ImplEach

This feels like a very good combination being short and still clear! 🤓

---

<div class="post-metadata">

**Author:** ![christoph\_schlumpf](https://sea1.discourse-cdn.com/flex001/user_avatar/forum.modular.com/christoph_schlumpf/32/274_2.png) [@christoph\_schlumpf](https://forum.modular.com/u/christoph_schlumpf)\
**Post date:** [April 17, 2026, 10:14pm UTC](https://forum.modular.com/t/naming-some-trait-and-sometypelist-trait/2972/9 "2026-04-17T22:14:28Z")

</div>

I’m in favor of `Some`/`*Each`:

- `Some` is well established, short and no abbreviation.  
Semantics: `Some` type that conforms to the trait.
- `*Each` complements `Some` as it is short and no abbreviation too. It implies plurality.  
Semantics: `Each` type conforms to the trait.

IMO the names must be short and easy to recognize. This allows for a “concise” implicit alternative to the more complex and verbose explicit syntax.

Example:

```mojo
def foo[T: Copyable, //](arg: T) -> Int: ...

def foo(arg: Some[Copyable]) -> Int: ...

def bar[*Ts: Copyable](*args: *Ts) -> Int: ...

def bar(*args: *Each[Copyable]) -> Int: ...

```
