use crate::{
primitives::Constant,
boolean::{True, False},
define
};
define! {
pub fn Pair ::= { X. Y. F. { F, X, Y }} where
F: X,
{F, X}: Y;
pub fn First ::= { P. { P, True }} where P: True;
pub fn Second ::= { P. { P, False }} where P: False;
pub fn Null ::= { P. { P, Constant<Constant<False>> }} where P: (Constant<Constant<False>>);
}
pub type Nil = Constant<True>;
#[test]
fn t() {
use crate::prelude::*;
let _: call!{ Null, Nil } = True::default();
let _: call!{ Null, {Pair, (), Nil} } = False::default();
}