Hi there! Are you looking for the official Deno documentation? Try docs.deno.com for all your Deno learning needs.

createFlatmappable

import { createFlatmappable } from "https://raw.githubusercontent.com/baetheus/fun/main/flatmappable.ts";

Derive a Flatmappable instance from unwrap, flatmap, and a Kind. This is the simplest way to get a Flatmappable instance.

@example
import type { Kind, Out } from "./kind.ts";
import { createFlatmappable } from "./flatmappable.ts";
import { pipe } from "./fn.ts";

// Create a Kind for Promise<A>
interface KindPromise extends Kind {
  readonly kind: Promise<Out<this, 0>>;
};

// Create an of and chain function for Promise<A>
const wrap = <A>(a: A): Promise<A> => Promise.resolve(a);
const flatmap = <A, I>(faui: (a: A) => Promise<I>) =>
  (ua: Promise<A>): Promise<I> => ua.then(faui);

// Derive a Flatmappable for Promise
const M = createFlatmappable<KindPromise>({ wrap, flatmap });

const result = await pipe(
  M.wrap((n: number) => (m: number) => n + m),
  M.apply(M.wrap(1)),
  M.apply(M.wrap(1)),
); // 2
function createFlatmappable<U extends Kind>({ wrap, flatmap }: Pick<Flatmappable<U>, "wrap" | "flatmap">): Flatmappable<U>;
§
createFlatmappable<U extends Kind>({ wrap, flatmap }: Pick<Flatmappable<U>, "wrap" | "flatmap">): Flatmappable<U>
[src]

§Type Parameters

§
U extends Kind
[src]

§Parameters

§
{ wrap, flatmap }: Pick<Flatmappable<U>, "wrap" | "flatmap">
[src]

§Return Type