Diffstat (limited to 'src/macros/build.rs')
-rw-r--r--src/macros/build.rs44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/macros/build.rs b/src/macros/build.rs
index 49dc396..132a4f4 100644
--- a/src/macros/build.rs
+++ b/src/macros/build.rs
@@ -11,9 +11,9 @@ macro_rules! Build {
// add a module here to seal fields.
impl<'ctx, M: 'ctx, E: effectful::environment::Environment> $crate::Build<'ctx, M, E> for $name
where
- effectful::bound::Dynamic<$name>: effectful::environment::DynBind<E>,
+ effectful::bound::Dynamic<$name>: effectful::bound::DynBind<E>,
$($type: $crate::Build<'ctx, M, E>,)*
- $(effectful::bound::Dynamic<$type>: effectful::environment::DynBind<E>,)*
+ $(effectful::bound::Dynamic<$type>: effectful::bound::DynBind<E>,)*
$crate::build::builders::core::r#struct::StructBuilder<'ctx, __Info, M, E>: $crate::Builder<'ctx, E, Value = Self>
{
type Builder = $crate::build::builders::core::r#struct::StructBuilder<'ctx, __Info, M, E>;
@@ -83,9 +83,9 @@ macro_rules! Build {
impl<'ctx, M: 'ctx, E: effectful::environment::Environment> $crate::build::builders::core::r#struct::StructTypeInfo<'ctx, M, E> for __Info
where
- effectful::bound::Dynamic<$name>: effectful::environment::DynBind<E>,
+ effectful::bound::Dynamic<$name>: effectful::bound::DynBind<E>,
$($type: $crate::Build<'ctx, M, E>,)*
- $(effectful::bound::Dynamic<$type>: effectful::environment::DynBind<E>),*
+ $(effectful::bound::Dynamic<$type>: effectful::bound::DynBind<E>),*
{
type Builders = Builders<'ctx, M, E>;
type FieldMarker = Field;
@@ -99,13 +99,14 @@ macro_rules! Build {
};
#[inline(always)]
- fn new_builders<'a>(seed: Self::Seed) -> effectful::environment::NativeForm<'a, Self::Builders, E> {
+ fn new_builders<'a>(seed: Self::Seed) -> effectful::effective::Canonical<'a, Self::Builders, E> {
let ($($field),*) = seed;
use effectful::effective::Effective;
+ use effectful::join;
- effectful::effective::join(
- ($(<<$type as $crate::Build<'ctx, M, E>>::Builder as $crate::Builder::<E>>::from_seed($field),)*)
+ ::effectful::join!(
+ $(#[capture($field)] || <<$type as $crate::Build<'ctx, M, E>>::Builder as $crate::Builder::<E>>::from_seed($field),)*
).map((), |_, ($($field,)*)| {
Builders {
$($field),*
@@ -114,16 +115,19 @@ macro_rules! Build {
.cast()
}
- fn from_builders<'a>(builders: Self::Builders) -> effectful::environment::NativeForm<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> {
+ fn from_builders<'a>(builders: Self::Builders) -> effectful::effective::Canonical<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> {
use $crate::Builder;
use effectful::effective::Effective;
use $crate::build::BuilderTypes;
+ use effectful::try_join;
- effectful::effective::try_join(
- (
- $(builders.$field.build().map((), |_, x| x.map(|x| effectful::bound::Dynamic(<<$type as Build<'ctx, M, E>>::Builder as BuilderTypes<E>>::unwrap_output(x))).map_err(Error::$field)),)*
- )
+ let Builders {
+ $($field),*
+ } = builders;
+
+ ::effectful::try_join!(
+ $(#[capture($field)] || $field.build().map((), |_, x| x.map(|x| effectful::bound::Dynamic(<<$type as Build<'ctx, M, E>>::Builder as BuilderTypes<E>>::unwrap_output(x))).map_err(Error::$field)),)*
).map((), |_, result| match result {
Ok(($(effectful::bound::Dynamic($field),)*)) => Ok(effectful::bound::Dynamic($name {
$($field),*
@@ -175,7 +179,7 @@ macro_rules! Build {
// add a module here to seal fields.
impl<'ctx, M: 'ctx, E: effectful::environment::Environment> $crate::Build<'ctx, M, E> for $name
where
- effectful::bound::Dynamic<$name>: effectful::environment::DynBind<E>,
+ effectful::bound::Dynamic<$name>: effectful::bound::DynBind<E>,
$($value: $crate::Build<'ctx, M, E>,)*
$(<<$value as Build<'ctx, M, E>>::Builder as BuilderTypes<E>>::Seed: Default,)*
$crate::build::builders::core::r#enum::EnumBuilder<'ctx, __Info, M, E>: $crate::Builder<'ctx, E, Value = Self>
@@ -272,7 +276,7 @@ macro_rules! Build {
impl<'ctx, M: 'ctx, E: effectful::environment::Environment> $crate::build::builders::core::r#enum::EnumBuildInfo<'ctx, M, E> for __Info
where
- effectful::bound::Dynamic<$name>: effectful::environment::DynBind<E>,
+ effectful::bound::Dynamic<$name>: effectful::bound::DynBind<E>,
$($value: $crate::Build<'ctx, M, E>,)*
$(<<$value as Build<'ctx, M, E>>::Builder as BuilderTypes<E>>::Seed: Default),*
{
@@ -291,7 +295,7 @@ macro_rules! Build {
fn new_builder<'a>(
seed: Self::Seed,
variant: Self::VariantMarker,
- ) -> NativeForm<'a, Self::Builders, E> {
+ ) -> Canonical<'a, Self::Builders, E> {
match variant {
$(__Marker::$variant => {
Builder::<E>::from_seed(Default::default()).map((), |_, builder| __Builders::$variant(builder)).cast()
@@ -301,13 +305,13 @@ macro_rules! Build {
fn finish_builder<'a>(
builder: Self::Builders,
- ) -> NativeForm<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> {
+ ) -> Canonical<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> {
match builder {
$(__Builders::$variant(builder) => builder.build().map((), |_, value| value.map(|x| effectful::bound::Dynamic($name::$variant(<<$value as Build<'ctx, M, E>>::Builder as BuilderTypes<E>>::unwrap_output(x)))).map_err(__Error::$variant)).cast()),*
}
}
- fn from_value<'a>(value: TypeName::T<'a, 'ctx, Self::ValueT, E>) -> Self::T {
+ fn from_value<'a>(value: $crate::any::type_name::Lowered<'a, 'ctx, Self::ValueT, E>) -> Self::T {
value.0
}
@@ -334,8 +338,8 @@ macro_rules! Build {
fn guess_variant<'a>(
seed: Self::Seed,
scope: DynRecoverableScope<'a, 'ctx, E>,
- ) -> NativeForm<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> {
- use effectful::effective::EffectiveExt;
+ ) -> Canonical<'a, Result<effectful::bound::Dynamic<Self::T>, Self::Error>, E> {
+ use effectful::effective::Effective;
use effectful::short::ResultErrorExt;
E::value((scope, Err(__ErrorBuilder::<M, E> { A: None, B: None })))
@@ -344,7 +348,7 @@ macro_rules! Build {
<<$value as Build<M, E>>::Builder as Builder<_>>::from_seed(Default::default())
.map(scope, |scope, builder| (scope, builder))
- .update((), |(), (scope, builder)| scope.new_walk(builder.as_visitor()).cast())
+ .update_map((), |(), (scope, builder)| scope.new_walk(builder.as_visitor()).cast())
.then((), |(), ((_, builder), _)| builder.build())
.map(error, |mut error, result| {
result.map(|x| effectful::bound::Dynamic(X::$variant(