Skip to main content

Fix

Struct Fix 

Source
pub struct Fix<F: HKT>(/* private fields */);
Expand description

The fixed point of a functor F.

Fix<F> ties the recursive knot: Fix<F> ≅ F<Fix<F>>. It is the core type for recursion schemes — catamorphisms fold a Fix<F> down, anamorphisms build one up.

Uses Rc for indirection, which makes cloning cheap (reference count bump). This is essential for paramorphism, which needs to both preserve and consume each subterm.

Implementations§

Source§

impl<F: HKT> Fix<F>

Source

pub fn new(f: F::Of<Fix<F>>) -> Self

Wrap one layer of F<Fix<F>> into Fix<F>.

Source

pub fn unfix(self) -> F::Of<Fix<F>>
where F::Of<Fix<F>>: Clone,

Unwrap one layer, consuming the Fix.

If this is the sole owner, the inner value is moved out. Otherwise a shallow clone is made (each child Fix inside is Rc-cloned, which is O(1)).

Source

pub fn unfix_ref(&self) -> &F::Of<Fix<F>>

Borrow one layer without consuming.

Trait Implementations§

Source§

impl<F: HKT> Clone for Fix<F>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<F> Freeze for Fix<F>

§

impl<F> RefUnwindSafe for Fix<F>
where <F as HKT>::Of<Fix<F>>: RefUnwindSafe,

§

impl<F> !Send for Fix<F>

§

impl<F> !Sync for Fix<F>

§

impl<F> Unpin for Fix<F>

§

impl<F> UnsafeUnpin for Fix<F>

§

impl<F> UnwindSafe for Fix<F>
where <F as HKT>::Of<Fix<F>>: RefUnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.