1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*
* SPDX-License-Identifier: MIT
* Copyright (c) 2023 - 2026. The DeepCausality Authors and Contributors. All Rights Reserved.
*/
use crateArrow;
use PhantomData;
/// Lifts a plain function `F: Fn(A) -> B` into an [`Arrow`] `A → B`.
///
/// This is the value-level counterpart of [`Morphism`](crate::Morphism)'s application:
/// `Lift::new(f)` makes `f` a first-class, composable arrow.
///
/// The input/output types `A`/`B` are carried in the type (via `PhantomData`) rather than
/// left to the `Fn` bound alone — `Fn`'s argument is not treated by the type system as
/// uniquely determined by `F`, so `Lift<F>` would be rejected (`E0207`); `Lift<A, B, F>`
/// fixes it. Use [`Lift::new`] (or the [`arrow`](crate::arrow) builder) so callers never
/// write the `PhantomData`.
>);