///|
pub fn[A, B, C] compose(fa : (A) -> B, fb : (B) -> C) -> (A) -> C {
  fn(a) { a |> fa |> fb }
}

///|
pub fn[A, B, C, D] compose_2(
  fa : (A) -> B,
  fb : (B) -> C,
  fc : (C) -> D
) -> (A) -> D {
  fn(a) { a |> fa |> fb |> fc }
}