diff --git a/src/rstd/atomic.rs b/src/rstd/atomic.rs
index 89fbfa9..02e7bdd 100644
--- a/src/rstd/atomic.rs
+++ b/src/rstd/atomic.rs
@@ -13,14 +13,19 @@ use crate::rcore::*;
 
 use super::*;
 
-pub type AParseResult<A> = Result<A, <A as Atomic>::AParseError>;
+pub type AParseError<A> = <A as AtomicBase>::AParseError;
+
+pub type AParseResult<A> = Result<A, AParseError<A>>;
 
 /// This trait combines functionality of [`Mentionable`] and [`Factory`],
 /// while limiting [`Mentionable::points_typed`] (and corresponding [`Mentionable::topology`])
 /// to an empty sequence.
-pub trait Atomic: 'static + Send + Sync + Send + Clone + Serializable {
+pub trait AtomicBase: 'static + Send + Sync + Send + Clone + Serializable {
     /// Equivalent of [`FactoryBase::ParseError`].
     type AParseError: Error;
+}
+
+pub trait Atomic: AtomicBase {
     /// Static equivalent of [`Factory::deserialize`].
     fn a_deserialize(inlining: impl Inlining) -> AParseResult<Self>;
     /// Static equivalent of [`Factory::extend`].
diff --git a/src/rstd/atomic/array.rs b/src/rstd/atomic/array.rs
index 8251913..4f34aa9 100644
--- a/src/rstd/atomic/array.rs
+++ b/src/rstd/atomic/array.rs
@@ -34,9 +34,11 @@ impl From<&[u8]> for ArrayParseError {
     }
 }
 
-impl<const N: usize> Atomic for [u8; N] {
+impl<const N: usize> AtomicBase for [u8; N] {
     type AParseError = ArrayParseError;
+}
 
+impl<const N: usize> Atomic for [u8; N] {
     fn a_deserialize(inlining: impl Inlining) -> AParseResult<Self> {
         Self::a_ideserialize(inlining).seal()
     }
diff --git a/src/rstd/atomic/au64.rs b/src/rstd/atomic/au64.rs
index 6ec40ee..0016fe1 100644
--- a/src/rstd/atomic/au64.rs
+++ b/src/rstd/atomic/au64.rs
@@ -34,9 +34,11 @@ impl From<&[u8]> for IntParseError {
     }
 }
 
-impl Atomic for u64 {
+impl AtomicBase for u64 {
     type AParseError = IntParseError;
+}
 
+impl Atomic for u64 {
     fn a_deserialize(inlining: impl Inlining) -> AParseResult<Self> {
         Self::a_ideserialize(inlining).seal()
     }
diff --git a/src/rstd/atomic/boolean.rs b/src/rstd/atomic/boolean.rs
index a694af9..2b0aca7 100644
--- a/src/rstd/atomic/boolean.rs
+++ b/src/rstd/atomic/boolean.rs
@@ -41,9 +41,11 @@ impl From<&[u8]> for BooleanParseError {
     }
 }
 
-impl Atomic for bool {
+impl AtomicBase for bool {
     type AParseError = BooleanParseError;
+}
 
+impl Atomic for bool {
     fn a_deserialize(inlining: impl Inlining) -> AParseResult<Self> {
         Self::a_ideserialize(inlining).seal()
     }
diff --git a/src/rstd/atomic/plain.rs b/src/rstd/atomic/plain.rs
index f990d56..fdc79dd 100644
--- a/src/rstd/atomic/plain.rs
+++ b/src/rstd/atomic/plain.rs
@@ -28,9 +28,11 @@ impl Serializable for Plain {
     }
 }
 
-impl Atomic for Plain {
+impl AtomicBase for Plain {
     type AParseError = PlainParseError;
+}
 
+impl Atomic for Plain {
     fn a_deserialize(inlining: impl Inlining) -> AParseResult<Self> {
         Ok(inlining.iread_all(Plain::from_slice))
     }
diff --git a/src/rstd/inlining.rs b/src/rstd/inlining.rs
index 7b26785..0e1772e 100644
--- a/src/rstd/inlining.rs
+++ b/src/rstd/inlining.rs
@@ -45,7 +45,7 @@ pub trait ConstSizeObject<'a, Ctx: Context<'a>>: FixedSizeObject<'a, Ctx> {
     const SIZE: usize;
 }
 
-pub type ADParseResult<A, D> = Result<(A, D), <A as Atomic>::AParseError>;
+pub type ADParseResult<A, D> = Result<(A, D), AParseError<A>>;
 
 /// Atomic analogue of [`InlineableFactory`]/[`InlineableObject`].
 pub trait InlineableAtomic: Atomic {