: OpticsTrait {
+mod option;
+pub use option::{_None, _Some};
+
+/// Wrapper type
+#[derive(Clone, Copy)]
+#[repr(transparent)]
+pub struct Prism(pub(crate) P);
+
+pub trait PrismPreview {
type Field;
fn preview(thing: T) -> Option;
@@ -9,7 +18,7 @@ pub trait PrismReview: PrismPreview {
fn review(thing: Self::Field) -> T;
}
-impl PrismPreview for Optics
+impl
PrismPreview for Prism
where
P: PrismPreview,
{
@@ -20,7 +29,7 @@ where
}
}
-impl PrismReview for Optics
+impl
PrismReview for Prism
where
P: PrismReview,
{
@@ -36,12 +45,6 @@ pub fn review>(_prism: P, thing: P::Field) -> T {
P::review(thing)
}
-mod result;
-pub use result::{_Err, _Ok};
-
-mod option;
-pub use option::{_None, _Some};
-
#[cfg(test)]
mod tests {
use super::*;
diff --git a/src/prisms/option.rs b/src/prisms/option.rs
index ef287ef..16e6436 100644
--- a/src/prisms/option.rs
+++ b/src/prisms/option.rs
@@ -3,8 +3,8 @@ use super::*;
#[derive(Clone, Copy)]
pub struct SomeInner;
#[allow(non_upper_case_globals)]
-pub const _Some: Optics = Optics(SomeInner);
-impl OpticsTrait for SomeInner {}
+pub const _Some: Prism = Prism(SomeInner);
+
impl PrismPreview