Converts multiple instances of the underlying type to NonEmptyChunk of instances of the newtype.
Converts multiple instances of the underlying type to NonEmptyChunk of instances of the newtype.
If there is a def assertion
(see assert), each value will be checked
at compile-time.
Converts an instance of the underlying type to an instance of the newtype.
Converts an instance of the underlying type to an instance of the newtype.
If there is a def assertion
(see assert), the value will be checked
at compile-time.
This method is used to generate Newtype that can be validated at compile-time.
This method is used to generate Newtype that can be validated at
compile-time. This must wrap a Assertion and be assigned to
def assertion
.
For example, here is a refined Newtype for Natural numbers. Natural numbers are whole numbers greater than or equal to 0.
import zio.prelude.Subtype import zio.prelude.Assertion._ type Natural = Natural.Type object Natural extends Subtype[Int] { def assertion = assert(greaterThanOrEqualTo(0)) }
With this assertion
defined, Natural.apply
will check literal values
at compile-time, failing with an error message if the Assertion is not
satisfied.
Natural(-10)
would render "-10 failed to satisfy greaterThanOrEqualTo(10)
"
IMPORTANT: Due to the macro machinery powering this feature, you must be
sure to NOT ANNOTATE def assertion
with a type (QuotedAssertion
). If
you do so, the macro will not be able to run the provided assertion at
compile-time and will fail with a message containing this very same
information.
Derives an instance of a type class for the new type given an instance of the type class for the underlying type.
Derives an instance of a type class for the new type given an instance of the type class for the underlying type. The caller is responsible for the type class being a valid instance for the new type.
Allows pattern matching on newtype instances to convert them back to instances of the underlying type.
Converts an instance of the newtype back to an instance of the underlying type.
Converts an instance of a type parameterized on the newtype back to an instance of a type parameterized on the underlying type.
Converts an instance of a type parameterized on the newtype back to an instance of a type parameterized on the underlying type. For example, this could be used to convert a list of instances of the newtype back to a list of instances of the underlying type.
Converts an instance of the underlying type to an instance of the newtype.
Converts an instance of the underlying type to an instance of the newtype. Ignores the assertion.
Converts an instance of a type parameterized on the underlying type to an instance of a type parameterized on the newtype.
Converts an instance of a type parameterized on the underlying type to an instance of a type parameterized on the newtype. For example, this could be used to convert a list of instances of the underlying type to a list of instances of the newtype.
Due to macro limitations, this method cannot with refined newtype and will thus issue a compiler error if you attempt to do so.
The class of objects corresponding to newtypes. Users should implement an object that extends this class to create their own newtypes, specifying
A
as the underlying type to wrap.