Skip to content

Instantly share code, notes, and snippets.

@MateuszKubuszok
Last active April 9, 2026 19:30
Show Gist options
  • Select an option

  • Save MateuszKubuszok/318d60d4116db95ac03a2a3e112e1751 to your computer and use it in GitHub Desktop.

Select an option

Save MateuszKubuszok/318d60d4116db95ac03a2a3e112e1751 to your computer and use it in GitHub Desktop.

Revisions

  1. MateuszKubuszok revised this gist Jul 16, 2025. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions table.md
    Original file line number Diff line number Diff line change
    @@ -4,8 +4,8 @@ Because we have too few solutions

    | Library | Docs | Types | Integrations | Notes |
    | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
    | build-in | [official](https://docs.scala-lang.org/overviews/core/value-classes.html) | `AnyVal` extended by `class` with a single value | many libraries support `AnyVal`s | - Scala 2/3, but on 3 it has a replacement<br />- cannot always prevent boxing (unreliable) |
    | build-in | [official](https://docs.scala-lang.org/scala3/book/types-opaque-types.html) | `opaque type Name = Underlying` | vanilla version has no integrations | - Scala 3-only<br />- always prevents boxing |
    | built-in | [official](https://docs.scala-lang.org/overviews/core/value-classes.html) | `AnyVal` extended by `class` with a single value | many libraries support `AnyVal`s | - Scala 2/3, but on 3 it has a replacement<br />- cannot always prevent boxing (unreliable) |
    | built-in | [official](https://docs.scala-lang.org/scala3/book/types-opaque-types.html) | `opaque type Name = Underlying` | vanilla version has no integrations | - Scala 3-only<br />- always prevents boxing |
    | Scalaz ([`scalaz/scalaz`](https://github.com/scalaz/scalaz)) | | `Underlying @@ Tag` | ? | - Scala 2/3<br />- it's a hack but works |
    | Macwire ([`softwaremill/macwire`](https://github.com/softwaremill/macwire)) | | `Underlying @@ Tag` | ? | - Scala 2/3<br />- like Scalaz' version<br />- only used for DI with Macwire |
    | Kebs ([`theiterators/kebs`](https://github.com/theiterators/kebs)) | | `Underlying @@ Tag`<br />`@tagged` macro annotation<br />`Opaque[Underlying, Name]` extended by `Name` companion | a lot | - Scala 2/3<br />- solution for Scala 2/3 and integrations |
  2. MateuszKubuszok revised this gist Jul 16, 2025. 1 changed file with 35 additions and 11 deletions.
    46 changes: 35 additions & 11 deletions table.md
    Original file line number Diff line number Diff line change
    @@ -5,14 +5,38 @@ Because we have too few solutions
    | Library | Docs | Types | Integrations | Notes |
    | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
    | build-in | [official](https://docs.scala-lang.org/overviews/core/value-classes.html) | `AnyVal` extended by `class` with a single value | many libraries support `AnyVal`s | - Scala 2/3, but on 3 it has a replacement<br />- cannot always prevent boxing (unreliable) |
    | build-in | [official](https://docs.scala-lang.org/scala3/book/types-opaque-types.html) | `opaque type` | vanilla version has no integrations | - Scala 3-only<br />- always prevents boxing |
    | Scalaz ([`scalaz/scalaz`](https://github.com/scalaz/scalaz)) | | `Type @@ Tag` | ? | - Scala 2/3<br />- it's a hack but works |
    | Macwire ([`softwaremill/macwire`](https://github.com/softwaremill/macwire)) | | `Type @@ Tag` | ? | - Scala 2/3<br />- like Scalaz' version<br />- only used for DI with Macwire |
    | NewType ([`estatico/scala-newtype`](https://github.com/estatico/scala-newtype)) | | `@newtype`, `@newsubtype` macro annotations | a lot, via `Coercible` type class | - Scala 2-only (macro-annotations on Scala 3 are a blocker)<br />- a lof of integrations<br />- macro annotation conveniently rewrites methods into extension methods |
    | supertagged for scala ([`rudogma/scala-supertagged`](https://github.com/rudogma/scala-supertagged)) | | `Type @@ Tag`, `Newtype0`, `NewtypeT`, `Newtype` - extended by companion objects | possible, via `Extractor` type class | - Scala 2-only<br />- requires manually defining extension methods in companion object |
    | Monix’s Newtypes ([`monix/newtypes`](https://github.com/monix/newtypes)) | [official](https://newtypes.monix.io/) | `Newtype`, `NewtypeWrapped`, `NewtypeValidated`, `NewtypeK`, `NewtypeCovariantK` and `NewSubtype` variants - extended by companion objects | possible, via `HasExtractor` and `HasBuilder` type classes | - Scala 2/3<br />- requires manually defining extension methods in companion object |
    | neotype ([`kitlangton/neotype`](https://github.com/kitlangton/neotype)) | | `TypeWrapper`, `Newtype`, `Subtype` - extended by companion objects | some, via `WithType` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br />- requires manually defining extension methods in companion object |
    | Yet Another Newtype Library - yantl ([`arturaz/yantl`](https://github.com/arturaz/yantl)) | [official](https://arturaz.github.io/yantl/) | `Newtype.Of[Type]`, `Newtype.ValidatedOf(...)`, `Newtype.WithoutValidationOf[Type]` extended by companion object | possible, via `Newtype.WithType` or `Newtype.WithUnvalidatedType` type classes | - Scala 3-only<br />- requires manually defining extension methods in companion object |
    | refined ([`fthomas/refined`](https://github.com/fthomas/refined)) | | `Type Refined Refinment` | a lot, via `Validate` type class | - Scala 2/3<br />- allows compile-time validation of some values, but only on Scala 2 |
    | Iron ([`Iltotore/iron`](https://github.com/Iltotore/iron)) | [official](https://iltotore.github.io/iron/docs/) | `Type :\| Refinment`, `RefinedTypeOps[Type, Refinement, OpaqueTypeName]` extended by companion object | a lot via `Constraint` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br /> |
    | Refined4s ([`kevin-lee/refined4s`](https://github.com/kevin-lee/refined4s)) | [official](https://refined4s.kevinly.dev/) | `Refined[Type]` , `NewType[Type]` extended by companion object | some, via mixins to companion object or `deriving` method in companion | - Scala 2/3 |
    | build-in | [official](https://docs.scala-lang.org/scala3/book/types-opaque-types.html) | `opaque type Name = Underlying` | vanilla version has no integrations | - Scala 3-only<br />- always prevents boxing |
    | Scalaz ([`scalaz/scalaz`](https://github.com/scalaz/scalaz)) | | `Underlying @@ Tag` | ? | - Scala 2/3<br />- it's a hack but works |
    | Macwire ([`softwaremill/macwire`](https://github.com/softwaremill/macwire)) | | `Underlying @@ Tag` | ? | - Scala 2/3<br />- like Scalaz' version<br />- only used for DI with Macwire |
    | Kebs ([`theiterators/kebs`](https://github.com/theiterators/kebs)) | | `Underlying @@ Tag`<br />`@tagged` macro annotation<br />`Opaque[Underlying, Name]` extended by `Name` companion | a lot | - Scala 2/3<br />- solution for Scala 2/3 and integrations |
    | NewType ([`estatico/scala-newtype`](https://github.com/estatico/scala-newtype)) | | `@newtype`, `@newsubtype` macro annotations | a lot, via `Coercible[Underlying, Name]` type class | - Scala 2-only (macro-annotations on Scala 3 are a blocker)<br />- a lof of integrations<br />- macro annotation conveniently rewrites methods into extension methods |
    | ZIO Prelude ([`zio/zio-prelude`](https://github.com/zio/zio-prelude)) | [official](https://zio.dev/zio-prelude/) | `Newtype[Underlying]`, `Subtype[Underlying]` - extended by companion objects | ??? | - Scala 2/3<br />- requires manually defining extension methods in companion object |
    | supertagged for scala ([`rudogma/scala-supertagged`](https://github.com/rudogma/scala-supertagged)) | | `Underlying @@ Tag`<br /> `Newtype0`, `NewtypeT[Underlying]`, `Newtype[Underlying]` and `TaggedType` variants - extended by companion objects | possible, via `Extractor[Underlying, Name]` type class | - Scala 2-only<br />- requires manually defining extension methods in companion object |
    | Monix’s Newtypes ([`monix/newtypes`](https://github.com/monix/newtypes)) | [official](https://newtypes.monix.io/) | `Newtype[Underlying]`, `NewtypeWrapped[Underlying]`, `NewtypeValidated[Underlying]`, `NewtypeK[Underlying]`, `NewtypeCovariantK[Underlying]` and `NewSubtype[Underlying]` variants - extended by companion objects | possible, via `HasExtractor.Aux[Name, Underlying]` and `HasBuilder.Aux[Name, Underlying]` type classes | - Scala 2/3<br />- requires manually defining extension methods in companion object |
    | neotype ([`kitlangton/neotype`](https://github.com/kitlangton/neotype)) | | `TypeWrapper[Underlying]`, `Newtype[Underlying]`, `Subtype[Underlying]` - extended by companion objects | some, via `WithType[Underlying, Name]` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br />- requires manually defining extension methods in companion object |
    | Yet Another Newtype Library - yantl ([`arturaz/yantl`](https://github.com/arturaz/yantl)) | [official](https://arturaz.github.io/yantl/) | `Newtype.Of[Underlying]`, `Newtype.ValidatedOf(...)`, `Newtype.WithoutValidationOf[Underlying]` extended by companion object | possible, via `Newtype.WithType` or `Newtype.WithUnvalidatedType` type classes | - Scala 3-only<br />- requires manually defining extension methods in companion object |
    | refined ([`fthomas/refined`](https://github.com/fthomas/refined)) | | `Underlying Refined Refinment` | a lot, via `Validate` type class | - Scala 2/3<br />- allows compile-time validation of some values, but only on Scala 2 |
    | Iron ([`Iltotore/iron`](https://github.com/Iltotore/iron)) | [official](https://iltotore.github.io/iron/docs/) | `Underlying :\| Refinment`, `RefinedTypeOps[Underlying, Refinement, OpaqueTypeName]` extended by companion object | a lot via `Constraint` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br /> |
    | Refined4s ([`kevin-lee/refined4s`](https://github.com/kevin-lee/refined4s)) | [official](https://refined4s.kevinly.dev/) | `Refined[Underlying]` , `NewType[Underlying]` extended by companion object | some, via mixins to companion object or `deriving` method in companion | - Scala 2/3 |

    I conveniently skipped detailed description for some other attempts that had few stars like:

    - Newts ([`sir-wabbit/newtypes`](https://github.com/sir-wabbit/newtypes))
    - another Newts ([`julien-truffaut/newts`](https://github.com/julien-truffaut/newts))
    - Opaque newtypes ([`indoorvivants/opaque-newtypes`](https://github.com/indoorvivants/opaque-newtypes))
    - sprout ([`lorandszakacs/sprout`](https://github.com/lorandszakacs/sprout))
    - dilate ([`vitorsvieira/dilate`](https://github.com/vitorsvieira/dilate))
    - Mazboot (previously called Validated) ([`tabdulradi/mazboot`](https://github.com/tabdulradi/mazboot))
    - taggy ([`acjay/taggy`](https://github.com/acjay/taggy))
    - as ([`makiftutuncu/as`](https://github.com/makiftutuncu/as))
    - ...

    ## Motivation

    The motivation of this list is not comparing the features of tagged/newtype/refined libraries - they 90% overlapping.

    The goal is to show that instead of picking 1 solution, commiting to it, and making sure all libraries would have good integration with it, we have gazillion of half-baked solutions, none of which is perfect, each boasting about 1 thing that no-one else has, and each requiring integrating it yourself with half the libraries because only half of them have existing integrations that the author just happen to find convenient.

    It is a huge waste of duplicated effort, it showcases that development in our community is ego-driven ("there is no glory in contributing to someone else library, but there is in writing it from scratch!"), and this is why we cannot have nice things.

    If this comment offended you, good. It means that the message reached.
  3. MateuszKubuszok revised this gist Jul 10, 2025. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion table.md
    Original file line number Diff line number Diff line change
    @@ -14,5 +14,5 @@ Because we have too few solutions
    | neotype ([`kitlangton/neotype`](https://github.com/kitlangton/neotype)) | | `TypeWrapper`, `Newtype`, `Subtype` - extended by companion objects | some, via `WithType` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br />- requires manually defining extension methods in companion object |
    | Yet Another Newtype Library - yantl ([`arturaz/yantl`](https://github.com/arturaz/yantl)) | [official](https://arturaz.github.io/yantl/) | `Newtype.Of[Type]`, `Newtype.ValidatedOf(...)`, `Newtype.WithoutValidationOf[Type]` extended by companion object | possible, via `Newtype.WithType` or `Newtype.WithUnvalidatedType` type classes | - Scala 3-only<br />- requires manually defining extension methods in companion object |
    | refined ([`fthomas/refined`](https://github.com/fthomas/refined)) | | `Type Refined Refinment` | a lot, via `Validate` type class | - Scala 2/3<br />- allows compile-time validation of some values, but only on Scala 2 |
    | Iron ([`Iltotore/iron`](https://github.com/Iltotore/iron)) | [official](https://iltotore.github.io/iron/docs/) | `Type :| Refinment`, `RefinedTypeOps[Type, Refinement, OpaqueTypeName]` extended by companion object | a lot via `Constraint` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br /> |
    | Iron ([`Iltotore/iron`](https://github.com/Iltotore/iron)) | [official](https://iltotore.github.io/iron/docs/) | `Type :\| Refinment`, `RefinedTypeOps[Type, Refinement, OpaqueTypeName]` extended by companion object | a lot via `Constraint` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br /> |
    | Refined4s ([`kevin-lee/refined4s`](https://github.com/kevin-lee/refined4s)) | [official](https://refined4s.kevinly.dev/) | `Refined[Type]` , `NewType[Type]` extended by companion object | some, via mixins to companion object or `deriving` method in companion | - Scala 2/3 |
  4. MateuszKubuszok revised this gist Jul 10, 2025. 2 changed files with 18 additions and 14 deletions.
    14 changes: 0 additions & 14 deletions list.md
    Original file line number Diff line number Diff line change
    @@ -1,14 +0,0 @@
    We have too few newtype/refined solutions for Scala:

    * `AnyVal` (can be used as a new type on Scala 2/3)
    * `opaque type` (can be used as a new type on Scala 3)
    * `@@` type from [Scalaz](https://github.com/scalaz/scalaz) (tagged type)
    * `@@` type from [MacWire](https://github.com/softwaremill/macwire) (tagged type)
    * `@newtype` macro from [NewType (`estatico/scala-newtype`)](https://github.com/estatico/scala-newtype) (newtype, Scala 2-only)
    * `Newtype` from [Newtypes (`monix/newtypes`)](https://newtypes.monix.io/) (newtype, Scala 2/3)
    * `NewType` type from [neotype (`kitlangton/neotype`)](https://github.com/kitlangton/neotype) (newtype, Scala 3-only)
    * `TaggedType` type from [supertagged for scala (`rudogma/scala-supertagged`)](https://github.com/rudogma/scala-supertagged) (newtype, Scala 2-only)
    * `Refined` from [refined (`fthomas/refined`)](https://github.com/fthomas/refined) (refined, Scala 2/3, but macros work only on 2)
    * `:|` from [Iron (`iltotore/iron`)](https://iltotore.github.io/iron/docs/) (Scala 3-only)
    * `Refined` from [Refined4s (`kevin-lee/refined4s`)](https://refined4s.kevinly.dev) (refined, Scala 2/3)
    * `Newtype` from [Yet Another Newtype Library (`arturaz/yantl`)](https://arturaz.github.io/yantl/) (Scala 3-only)
    18 changes: 18 additions & 0 deletions table.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,18 @@
    # Tagged, refined and newtypes for Scala

    Because we have too few solutions

    | Library | Docs | Types | Integrations | Notes |
    | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
    | build-in | [official](https://docs.scala-lang.org/overviews/core/value-classes.html) | `AnyVal` extended by `class` with a single value | many libraries support `AnyVal`s | - Scala 2/3, but on 3 it has a replacement<br />- cannot always prevent boxing (unreliable) |
    | build-in | [official](https://docs.scala-lang.org/scala3/book/types-opaque-types.html) | `opaque type` | vanilla version has no integrations | - Scala 3-only<br />- always prevents boxing |
    | Scalaz ([`scalaz/scalaz`](https://github.com/scalaz/scalaz)) | | `Type @@ Tag` | ? | - Scala 2/3<br />- it's a hack but works |
    | Macwire ([`softwaremill/macwire`](https://github.com/softwaremill/macwire)) | | `Type @@ Tag` | ? | - Scala 2/3<br />- like Scalaz' version<br />- only used for DI with Macwire |
    | NewType ([`estatico/scala-newtype`](https://github.com/estatico/scala-newtype)) | | `@newtype`, `@newsubtype` macro annotations | a lot, via `Coercible` type class | - Scala 2-only (macro-annotations on Scala 3 are a blocker)<br />- a lof of integrations<br />- macro annotation conveniently rewrites methods into extension methods |
    | supertagged for scala ([`rudogma/scala-supertagged`](https://github.com/rudogma/scala-supertagged)) | | `Type @@ Tag`, `Newtype0`, `NewtypeT`, `Newtype` - extended by companion objects | possible, via `Extractor` type class | - Scala 2-only<br />- requires manually defining extension methods in companion object |
    | Monix’s Newtypes ([`monix/newtypes`](https://github.com/monix/newtypes)) | [official](https://newtypes.monix.io/) | `Newtype`, `NewtypeWrapped`, `NewtypeValidated`, `NewtypeK`, `NewtypeCovariantK` and `NewSubtype` variants - extended by companion objects | possible, via `HasExtractor` and `HasBuilder` type classes | - Scala 2/3<br />- requires manually defining extension methods in companion object |
    | neotype ([`kitlangton/neotype`](https://github.com/kitlangton/neotype)) | | `TypeWrapper`, `Newtype`, `Subtype` - extended by companion objects | some, via `WithType` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br />- requires manually defining extension methods in companion object |
    | Yet Another Newtype Library - yantl ([`arturaz/yantl`](https://github.com/arturaz/yantl)) | [official](https://arturaz.github.io/yantl/) | `Newtype.Of[Type]`, `Newtype.ValidatedOf(...)`, `Newtype.WithoutValidationOf[Type]` extended by companion object | possible, via `Newtype.WithType` or `Newtype.WithUnvalidatedType` type classes | - Scala 3-only<br />- requires manually defining extension methods in companion object |
    | refined ([`fthomas/refined`](https://github.com/fthomas/refined)) | | `Type Refined Refinment` | a lot, via `Validate` type class | - Scala 2/3<br />- allows compile-time validation of some values, but only on Scala 2 |
    | Iron ([`Iltotore/iron`](https://github.com/Iltotore/iron)) | [official](https://iltotore.github.io/iron/docs/) | `Type :| Refinment`, `RefinedTypeOps[Type, Refinement, OpaqueTypeName]` extended by companion object | a lot via `Constraint` type class | - Scala 3-only<br />- allows validation of (some) input in compile-time<br /> |
    | Refined4s ([`kevin-lee/refined4s`](https://github.com/kevin-lee/refined4s)) | [official](https://refined4s.kevinly.dev/) | `Refined[Type]` , `NewType[Type]` extended by companion object | some, via mixins to companion object or `deriving` method in companion | - Scala 2/3 |
  5. MateuszKubuszok revised this gist Jul 10, 2025. No changes.
  6. MateuszKubuszok revised this gist Jul 10, 2025. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions list.md
    Original file line number Diff line number Diff line change
    @@ -11,3 +11,4 @@ We have too few newtype/refined solutions for Scala:
    * `Refined` from [refined (`fthomas/refined`)](https://github.com/fthomas/refined) (refined, Scala 2/3, but macros work only on 2)
    * `:|` from [Iron (`iltotore/iron`)](https://iltotore.github.io/iron/docs/) (Scala 3-only)
    * `Refined` from [Refined4s (`kevin-lee/refined4s`)](https://refined4s.kevinly.dev) (refined, Scala 2/3)
    * `Newtype` from [Yet Another Newtype Library (`arturaz/yantl`)](https://arturaz.github.io/yantl/) (Scala 3-only)
  7. MateuszKubuszok revised this gist Jul 10, 2025. 1 changed file with 7 additions and 1 deletion.
    8 changes: 7 additions & 1 deletion list.md
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,13 @@
    We have too few newtype/refined solutions for Scala:

    * `AnyVal` (can be used as a new type on Scala 2/3)
    * `opaque type` (can be used as a new type on Scala 3)
    * `@@` type from [Scalaz](https://github.com/scalaz/scalaz) (tagged type)
    * `@@` type from [MacWire](https://github.com/softwaremill/macwire) (tagged type)
    * `@newtype` macro from [NewType (`estatico/scala-newtype`)](https://github.com/estatico/scala-newtype) (newtype, Scala 2-only)
    * `Newtype` from [Newtypes (`monix/newtypes`)](https://newtypes.monix.io/) (newtype, Scala 2/3)
    * `NewType` type from [neotype (`kitlangton/neotype`)](https://github.com/kitlangton/neotype) (newtype, Scala 3-only)
    * `NewType` type from [neotype (`kitlangton/neotype`)](https://github.com/kitlangton/neotype) (newtype, Scala 3-only)
    * `TaggedType` type from [supertagged for scala (`rudogma/scala-supertagged`)](https://github.com/rudogma/scala-supertagged) (newtype, Scala 2-only)
    * `Refined` from [refined (`fthomas/refined`)](https://github.com/fthomas/refined) (refined, Scala 2/3, but macros work only on 2)
    * `:|` from [Iron (`iltotore/iron`)](https://iltotore.github.io/iron/docs/) (Scala 3-only)
    * `Refined` from [Refined4s (`kevin-lee/refined4s`)](https://refined4s.kevinly.dev) (refined, Scala 2/3)
  8. MateuszKubuszok created this gist Jul 10, 2025.
    7 changes: 7 additions & 0 deletions list.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,7 @@
    * `AnyVal` (can be used as a new type on Scala 2/3)
    * `opaque type` (can be used as a new type on Scala 3)
    * `@@` type from [Scalaz](https://github.com/scalaz/scalaz) (tagged type)
    * `@@` type from [MacWire](https://github.com/softwaremill/macwire) (tagged type)
    * `@newtype` macro from [NewType (`estatico/scala-newtype`)](https://github.com/estatico/scala-newtype) (newtype, Scala 2-only)
    * `Newtype` from [Newtypes (`monix/newtypes`)](https://newtypes.monix.io/) (newtype, Scala 2/3)
    * `NewType` type from [neotype (`kitlangton/neotype`)](https://github.com/kitlangton/neotype) (newtype, Scala 3-only)